为了账号安全,请及时绑定邮箱和手机立即绑定

饼干集随机

饼干集随机

Go
收到一只叮咚 2022-09-05 15:29:25
我正在尝试设置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。
查看完整描述

1 回答

?
慕桂英4014372

TA贡献1871条经验 获得超13个赞

如果没有可重复的示例,“随机”行为很难调试和推理。

有关处理程序的一些错误和注释。

  1. 如果 env var 不是整数,则处理程序会发回错误响应,并且不会返回。请注意,在向响应(http.Error() 会写入响应)。COOKIE_EXPIRE

  2. 如果 是整数但为负数或 ,则 cookie 过期(变量)将指向过去,并将导致 cookie 在浏览器中被删除。COOKIE_EXPIRE0expire

  3. 如果 cookie 名称无效 ( env var),则可能会以静默方式丢弃该 cookie(根据 http 的文档。SetCookie())。COOKIE_NAME

  4. 由于您设置为 ,请注意,Cookie 可以在浏览器中设置,但是当向您的服务器发出不安全 (HTTP) 请求时,它不会被包含(发送)。Securetrue

  5. 如果执行模板失败 (),则某些响应可能已提交,因此您无法发送另一个响应(甚至不能)。您必须执行定向到缓冲区的模板,如果成功,则发送它;或者将其直接发送到响应,但如果它失败,则以后无法进行更正(您能做的最好的方法是记录错误以供以后检查)。tmpl.ExecuteTemplate()http.Error()


查看完整回答
反对 回复 2022-09-05
  • 1 回答
  • 0 关注
  • 83 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信