我正在尝试设置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个赞
如果没有可重复的示例,“随机”行为很难调试和推理。
有关处理程序的一些错误和注释。
如果 env var 不是整数,则处理程序会发回错误响应,并且不会返回。请注意,在向响应(
http.Error()
会写入响应)。COOKIE_EXPIRE
如果 是整数但为负数或 ,则 cookie 过期(变量)将指向过去,并将导致 cookie 在浏览器中被删除。
COOKIE_EXPIRE
0
expire
如果 cookie 名称无效 ( env var),则可能会以静默方式丢弃该 cookie(根据
http 的文档。SetCookie()
)。COOKIE_NAME
由于您设置为 ,请注意,Cookie 可以在浏览器中设置,但是当向您的服务器发出不安全 (HTTP) 请求时,它不会被包含(发送)。
Secure
true
如果执行模板失败 (),则某些响应可能已提交,因此您无法发送另一个响应(甚至不能)。您必须执行定向到缓冲区的模板,如果成功,则发送它;或者将其直接发送到响应,但如果它失败,则以后无法进行更正(您能做的最好的方法是记录错误以供以后检查)。
tmpl.ExecuteTemplate()
http.Error()
- 1 回答
- 0 关注
- 83 浏览
添加回答
举报
0/150
提交
取消