2015-02-11 137 views
0

我試圖設置一個可以持續2年的cookie。但是,當我重新啓動瀏覽器時,Cookie似乎被刪除。瀏覽器重新啓動後奇怪的Cookie被刪除

該行爲似乎是隨機的,有時cookie會在重新啓動時保留,但在下一次重新啓動時它會再次消失。通過我的頁面返回

完整標題:

HTTP/1.1 200 OK 
Content-Length: 16 
x-response-time: 11ms 
Set-Cookie: ___auth=853c780cf6cacb177fd641af543c2e23048730aab126c2ee2f93cf0b725f3f30ec425160ea225761bee9bd9c100a1b897031f9194a7564301a9849b6e932440bb299cadabe885ca108973000bf5c183e; 
Expires=Fri, 10 Feb 2017 10:30:53 GMT; Path=/ 

目前這正在對http://localhost:8080運行,在生產尚未測試。行爲發生在Chrome和Firefox中。

任何想法?

+0

我有點困惑你的'java'標記。你在你的網頁上運行Java applet嗎?使用Java服務器? – 2015-02-14 15:43:49

+0

@ AlexanderO'Mara運行java作爲服務器上的語言。 – 2015-02-14 16:24:07

+1

您的響應標題是否在您的問題中實際包含'Expires ='之前的新行字符?如果是這樣,那麼瀏覽器可能會創建一個會話cookie,它會在關閉時被刪除。 – 2015-02-14 17:03:55

回答

1

正如你所看到的here,Expires屬性在HTTP 1.1中被棄用,取而代之的是Max-Age。如果您已經設置了一些年齡爲一個特定的cookie,它可以在餅乾被視爲Max-age像下面

Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 

但在你的迴應,也沒有最大年齡設定 ,所以其視爲會話cookie和被清除退出瀏覽器:-)

Set-Cookie: ___auth=853c780cf6cacb177fd641af543c2e23048730aab126c2ee2f93cf0b725f3f30ec425160ea225761bee9bd9c100a1b897031f9194a7564301a9849b6e932440bb299cadabe885ca108973000bf5c183e; 

因此,創建使用Cookie API餅乾像下面和他們的Servlet添加到HttpServletResponse的這樣

Cookie cookie = new Cookie ("_auth", authString); 
cookie.setMaxTime(63072000); // time in seconds 

response.addCookie(cookie); 

有了這個,它應該堅持2年:-)

+1

根據該頁面,似乎建議'expires'被推薦超過'max-age'? 「如果你關心你的cookies在很大比例的網絡用戶(65.66%)中正常工作,不要堅持你的cookies按照規範(max-age)」正確的方式「,堅持他們的工作方式(到期) 「。 – 2015-02-15 14:50:57

+0

哈哈..我以爲你會問那一個:-)這篇文章是5歲,作者的意圖是支持IE6,IE7,IE8和其他舊版本的FF和Chrome。但目前的現代瀏覽器完全符合標準,因此您可以毫無問題地使用'Max-Age'。所以使用我的答案中提到的「Cookie API」添加'Max-Age'屬性,因爲這是現代瀏覽器所考慮的問題,我認爲這是您此刻的問題所在:)您是否需要支持那些舊瀏覽器以及? – Arkantos 2015-02-15 17:14:20

+0

我不認爲問題是最大年齡,但將其設置爲max-age導致chrome顯示所有其他cookie,並且我看到我的框架在每次請求結束時重置了cookie,但未發送正確的到期/最大年齡。我追蹤並修正了這個錯誤,現在一切正常。您的評論幫助我追蹤了這一點,所以我將接受+獎勵賞金。 – 2015-02-15 17:31:29

相關問題