Golang中Cookie属性设置失败的问题
Golang中Cookie属性设置失败的问题 以下是我使用内置的 net/http 包设置 Cookie 的代码。它能够正常发送 Cookie,但不会附带任何属性。我不明白为什么会这样。
// 将令牌作为 Cookie 提供给前端
ck := &http.Cookie{
Name: "token",
Value: "test",
Path: "/",
MaxAge: int(time.Now().Add(time.Minute * 60).Unix()),
HttpOnly: true,
Secure: true,
SameSite: http.SameSiteLaxMode,
}
http.SetCookie(w, ck)
返回的响应头看起来像这样。
Set-Cookie: token=<valid token>
我期望的结果更接近这样:
Set-Cookie: token=<valid token>; Path=/; Max-Age=3600; HttpOnly; Secure; SameSite=Lax
更多关于Golang中Cookie属性设置失败的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang中Cookie属性设置失败的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
问题出在 MaxAge 字段的设置上。你错误地将一个未来的时间戳赋值给了 MaxAge,而 MaxAge 应该是一个以秒为单位的相对时间值。这会导致 MaxAge 被忽略,进而可能影响其他属性的序列化。
以下是修正后的代码:
ck := &http.Cookie{
Name: "token",
Value: "test",
Path: "/",
MaxAge: 60 * 60, // 3600 秒,即 1 小时
HttpOnly: true,
Secure: true,
SameSite: http.SameSiteLaxMode,
}
http.SetCookie(w, ck)
MaxAge 表示 Cookie 从设置时刻起存活的秒数。你原来的代码 int(time.Now().Add(time.Minute * 60).Unix()) 计算的是一个未来的绝对 Unix 时间戳(例如 1717751234),这个数值远大于 MaxAge 的合理范围,导致该属性无效。
正确的做法是直接设置相对秒数。例如,60 * 60 代表一小时。这样设置后,所有属性(Path、Max-Age、HttpOnly、Secure、SameSite)都会正确出现在响应头中。

