2015-02-11 85 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

相关问题