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 关注
- 110 浏览
添加回答
举报