2 回答

TA貢獻1828條經驗 獲得超4個贊
在將 cookie 發送到客戶端之前,您正在檢查 r.Cookies。您必須發送 cookie,然后如果您想檢查他們的 cookie,請發送第二個請求。在您發送第一個響應后,打開瀏覽器并查看您的 cookie 是否存在會容易得多。

TA貢獻1786條經驗 獲得超11個贊
Request.Cookie方法從請求 Cookie標頭中獲取 cookie 。
函數http.SetCookie將 Set-Cookie 標頭添加到響應標頭中。您可以使用以下代碼觀察 http.SetCookie 的結果:
fmt.Println(w.Header()["Set-Cookie"])
當前請求中不存在命名的 cookie,因為 http.SetCookie 不會修改當前請求。
cookie 值的流程是這樣的:
服務器使用 Set-Cookie 標頭在響應中設置 cookie。
客戶端將 cookie 存儲在“cookie jar”中。
客戶端使用 Cookie 請求標頭將 jar 中的匹配 cookie 添加到請求中。
服務器從請求標頭中獲取 cookie。
試試這個代碼。在瀏覽器中加載頁面并刷新以觀察 cookie 值的流動。
const cookieName = "example"
cookieValue := strconv.FormatInt(time.Now().UnixNano(), 10)
fmt.Printf("Set cookie %s=%s\n", cookieName, cookieValue)
cookie := http.Cookie{Name: cookieName, Value: cookieValue, Path: "/"}
http.SetCookie(w, &cookie)
c, err := r.Cookie(cookieName)
if err != nil {
fmt.Printf("Get cookie %s error: %v\n", cookieName, err)
} else {
fmt.Printf("Get cookie %s=%s\n", cookieName, c.Value)
}
- 2 回答
- 0 關注
- 164 瀏覽
添加回答
舉報