饼干集随机

我正在尝试设置Cookie,有时它有效,有时它不起作用。没有明显的模式。


func quoteGetHandler(w http.ResponseWriter, req *http.Request) {

    parts := strings.Split(req.URL.Path, "/")

    csrfToken := uniuri.NewLen(32)

    exp, err := strconv.Atoi(os.Getenv("COOKIE_EXPIRE"))  //5

    if err != nil {

        http.Error(w, whereami.WhereAmI()+err.Error(), http.StatusInternalServerError)

    }

    expire := time.Now().Add(time.Duration(exp) * time.Minute)

    cookie := http.Cookie{

        Name:     os.Getenv("COOKIE_NAME"), //csrf_token

        Value:    csrfToken, //string

        Path:     "/",

        Expires:  expire,

        HttpOnly: true,

        Secure:   true,

        MaxAge:   0,

        Domain:   os.Getenv("DOMAIN")} //<--example.com

    http.SetCookie(w, &cookie)

    tmp := htmlTags["quote"]

    tmp.CsrfToken = csrfToken

    if 2 < len(parts) && parts[2] != "" {

        tmp.Param = parts[2]

    }

    htmlTags["quote"] = tmp

    err = tmpl.ExecuteTemplate(w, siteType+"quote", htmlTags["quote"])

    if err != nil {

        http.Error(w, whereami.WhereAmI()+err.Error(), http.StatusInternalServerError)

    }

}

这发生在Chrome,FF,Bravo,Safari上。


协议是 https。


收到一只叮咚
浏览 88回答 1
1回答

慕桂英4014372

如果没有可重复的示例,“随机”行为很难调试和推理。有关处理程序的一些错误和注释。如果 env var 不是整数,则处理程序会发回错误响应,并且不会返回。请注意,在向响应(http.Error()&nbsp;会写入响应)。COOKIE_EXPIRE如果 是整数但为负数或 ,则 cookie 过期(变量)将指向过去,并将导致 cookie 在浏览器中被删除。COOKIE_EXPIRE0expire如果 cookie 名称无效 ( env var),则可能会以静默方式丢弃该 cookie(根据&nbsp;http 的文档。SetCookie())。COOKIE_NAME由于您设置为 ,请注意,Cookie 可以在浏览器中设置,但是当向您的服务器发出不安全 (HTTP) 请求时,它不会被包含(发送)。Securetrue如果执行模板失败 (),则某些响应可能已提交,因此您无法发送另一个响应(甚至不能)。您必须执行定向到缓冲区的模板,如果成功,则发送它;或者将其直接发送到响应,但如果它失败,则以后无法进行更正(您能做的最好的方法是记录错误以供以后检查)。tmpl.ExecuteTemplate()http.Error()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go