我在一个基于 jsp 的网站工作,需要启用 cookie 才能导航(这是一个内部网站,不会暴露在互联网上)。
用户的第一次访问将返回 302 到所请求的同一 URL,并设置一个小时的 cookie。
我正在使用 Cookie.setMaxAge(60*60);
设置到期日期。
我对某些浏览器的某些版本有一种非常奇怪的行为,它们会永远重定向。 (有些有效,有些无效)。
经过大量调查,我们发现服务器中的时间没有设置为正确的时间,并且将其时间设置为过去的两个半小时,导致cookie可能“已过期”,因为它已设置。 (这是我的疑问)
不幸的是,这是一个生产服务器,我无法轻松更改它(正在请求它,但需要一些时间)。
为了确认这就是问题所在,我将客户端计算机的时间更改为过去的两个半小时,并且它开始在该计算机上正常工作。
我的问题是:
- 哪些信息会发送到浏览器(关于 cookie 过期
date),它是绝对日期还是相对于当前日期 时间?。 - 如果 cookie 过期,浏览器是否会发送 cookie 过期日期或浏览器只是不发送它们 已到期? (我认为是第二种选择)。
- 因为我在使用某些浏览器时遇到问题,但它可以在其他浏览器上使用,所以不确切知道这里的 问题出在应用程序服务器还是浏览器中?
[编辑]
按照 Arham 建议阅读 RFC 6265 后,服务器可以将到期日期设置为绝对或相对。如果两者都存在,则相对优先。 我使用的应用服务器正在使用绝对值设置cookie(这可能是错误的),所以我不明白它在某些浏览器上是如何工作的。
[/编辑]
提前致谢。
最佳答案
- 根据 RFC 1123,日期以“Wdy, DD Mon YYYY HH:MM:SS GMT”的形式指定。
- 根据 RFC 6265,Cookie 的过期时间与浏览器收到 Cookie 的时间相关。
- 浏览器会在 Cookie 过期后将其删除,因此无法将相同的 Cookie 发送到服务器。
关于java - cookie.setMaxAge 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957902/