java - cookie.setMaxAge 奇怪的行为

标签 java jsp jakarta-ee servlets cookies

我在一个基于 jsp 的网站工作,需要启用 cookie 才能导航(这是一个内部网站,不会暴露在互联网上)。

用户的第一次访问将返回 302 到所请求的同一 URL,并设置一个小时的 cookie。

我正在使用 Cookie.setMaxAge(60*60); 设置到期日期。

我对某些浏览器的某些版本有一种非常奇怪的行为,它们会永远重定向。 (有些有效,有些无效)。

经过大量调查,我们发现服务器中的时间没有设置为正确的时间,并且将其时间设置为过去的两个半小时,导致cookie可能“已过期”,因为它已设置。 (这是我的疑问)

不幸的是,这是一个生产服务器,我无法轻松更改它(正在请求它,但需要一些时间)。

为了确认这就是问题所在,我将客户端计算机的时间更改为过去的两个半小时,并且它开始在该计算机上正常工作。

我的问题是:

  1. 哪些信息会发送到浏览器(关于 cookie 过期
    date),它是绝对日期还是相对于当前日期 时间?。
  2. 如果 cookie 过期,浏览器是否会发送 cookie 过期日期或浏览器只是不发送它们 已到期? (我认为是第二种选择)。
  3. 因为我在使用某些浏览器时遇到问题,但它可以在其他浏览器上使用,所以不确切知道这里的 问题出在应用程序服务器还是浏览器中?

[编辑]

按照 Arham 建议阅读 RFC 6265 后,服务器可以将到期日期设置为绝对或相对。如果两者都存在,则相对优先。 我使用的应用服务器正在使用绝对值设置cookie(这可能是错误的),所以我不明白它在某些浏览器上是如何工作的。

[/编辑]

提前致谢。

最佳答案

  1. 根据 RFC 1123,日期以“Wdy, DD Mon YYYY HH:MM:SS GMT”的形式指定。
  2. 根据 RFC 6265,Cookie 的过期时间与浏览器收到 Cookie 的时间相关。
  3. 浏览器会在 Cookie 过期后将其删除,因此无法将相同的 Cookie 发送到服务器。

关于java - cookie.setMaxAge 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957902/

相关文章:

java - EJB 删除实体不起作用

java - Android 应用程序在 Lollipop 之前的 Java 库上崩溃

java - 过滤器映射在 web.xml 中不起作用

jsp - 如何将从 servlet 接收的字符串变量显示到 JSP 的表单文本字段中

javascript - 如何在单击提交按钮之前隐藏标签?

java - 从 tomcat6 到 jboss5 的远程 ejb 调用导致 : Could not dereference object exception

java - 如何通过基于ejb 3.1注释的邮件发送

Java将从数据库返回的日期值拆分为单独的日期和时间字符串

java - 扫描可用的 wifi,检测特定的最强 Wifi SSID 以启动 XML Activity 布局

java - 是否可以在 Fragment 中有一个 ListView - 或者在一个 Fragment 中有一个 ListFragment?