我正在嘗試設置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 關注
- 111 瀏覽
添加回答
舉報
0/150
提交
取消