无法获取golang中的cookie过期时间

6ie5vjzr  于 2022-12-28  发布在  Go
关注(0)|答案(3)|浏览(167)

我正在设置一个新cookie

func f1(w http.ResponseWriter, r *http.Request) {
...
expire := time.Now().AddDate(0, 1, 0)
cookie := http.Cookie{"token", token, "/", "domain", expire, expire.Format(time.UnixDate), 86400, true, true, "token=" + token, []string{"token=" + token}}
http.SetCookie(w, &cookie)

那我就去拿

func f2(w http.ResponseWriter, r *http.Request) {
...
cookie, err := r.Cookie("token")
fmt.Println(cookie.Value)
fmt.Println(cookie.Expires)

产出

valid_token_string
0001-01-01 00:00:00 +0000 UTC

值与我设置的值相同,但Expires为空。为什么?

rqqzpn5f

rqqzpn5f1#

这就是HTTP的工作原理; expires属性只与Set-Cookie响应头一起发送,而不与Cookie请求头一起发送。Cookie请求头只包含Cookie的名称和值,不包含任何其他元数据。

am46iovg

am46iovg2#

我花了几分钟来弄清楚如何使用到期时间。
我觉得这个answer还不够,我想再补充两点:
1.服务器端cookie可以设置为附加安全性(称为仅限http),使其仅对服务器可见,而对客户端javascript不可见,但浏览器仍会存储它们,以表示特定的客户端。ref
1.当后端设置此cookie的过期时间时,浏览器会在cookie过期后立即删除它。
我相信这就是过期的工作原理。如果我们存储了一个会话令牌,后端无论如何都会检查会话过期。

0lvr5msh

0lvr5msh3#

如果您想查询过期时间,您应该将其作为不同的cookie。

相关问题