2015-04-12 109 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