2008-10-07 88 views
10

我不能取回cookie的最大生存週期,它總是返回-1餅乾getMaxAge

創建的cookie:

Cookie securityCookie = new Cookie("sec", "somevalue"); 
securityCookie.setMaxAge(EXPIRATION_TIME); 

檢索的cookie:

Cookie[] cookies = request.getCookies(); 
if (cookies != null) { 
    for(int i=0; i<cookies.length; i++) { 
     Cookie cookie = cookies[i]; 
     if ("sec".equals(cookie.getName())){ 
      int age = cookie.getMaxAge(); 
     } 
    } 
} 

我總是讓年齡= -1

此外,當我檢查在Firefox的cookie過期我看到奇怪的日期。

THX

+0

你是如何解決這個問題的?我正在努力解決完全相同的問題,但我沒有看到任何答案。 – 2010-03-10 12:11:45

+0

回答@Bruno De Fraine是有效的,請在下面的線索中閱讀 – Jeevanantham 2016-03-15 12:21:49

回答

1

的API稱,-1表示直到瀏覽器運行:

返回cookie,以秒爲單位指定的最長期限,默認情況下,-1表示cookie將繼續下去,直到瀏覽器關機

EXPIRATION_TIME常數的值是多少?

+0

當你創建一個cookie來發送響應對象時,你只使用cookie age參數。API指的是創建一個cookie。同樣的「Cookie」對象也用於封裝來自請求的數據,但請求不會發送任何「年齡」參數。太糟糕了,SET和GET沒有不同的對象(並行不同的HTTP頭Cookie和Set-Cookie。 – ChrisCantrell 2016-07-10 18:24:30

0

該值可能會被瀏覽器修改。

您創建了一個cookie並希望設置最大年齡。該cookie被髮送到瀏覽器。瀏覽器可能會拒絕cookie或忽略其最長使用期限,因爲其政策。這個修改後的cookie會被髮送回您的應用程序。

檢查您的瀏覽器設置。

0

只是爲了咧嘴笑,你能從瀏覽器中使用javascript檢索cookie的值嗎?

另外,您可以在您的servlet/jsp之前放置一個過濾器,以便您可以在servlet/jsp設置它之後檢查cookie的值嗎?

12

當瀏覽器將cookie發送回原始服務器時,它不包含任何年齡。因此,上面的「檢索」代碼沒有收到最大年齡是合乎邏輯的:它不包含在請求中。

當從服務器接收到cookie時,瀏覽器使用最大年齡參數來確定cookie應該保存多長時間;年齡永遠不會傳回服務器,過期的cookie會被丟棄。在處理請求時,如果您想更新Cookie的年齡,請在響應中重新包含Cookie。

另請參閱RFC中的「將Cookie發送到原始服務器」部分。