2008-10-07 45 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发送到原始服务器”部分。