2015-04-12 103 views
4

我设置一个新的Cookie无法获取Cookie有效期在golang

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是空的。 为什么?

+2

就像旁边一样:设置cookie时,不会使用'Cookie'的'RawExpires','Raw'和'Unparsed'字段。 –

回答

9

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

+0

文档说:SetCookie将一个Set-Cookie头添加到提供的ResponseWriter的头。 http://golang.org/pkg/net/http/ – spe

+1

@spe我不明白这是如何相关的。你正在使用'Cookie',它从请求中读取一个cookie。 'SetCookie'为响应设置一个cookie。 – rightfold

+0

我明白了。那么,是不是可以在服务器端获取cookie过期时间? – spe