【问题标题】:what's the deal with Cookie.setMaxAge(Integer.MAX_VALUE)?Cookie.setMaxAge(Integer.MAX_VALUE) 是怎么回事?
【发布时间】:2012-03-09 01:09:19
【问题描述】:

setMaxAge 应该控制 cookie 的最大年龄,所以如果我的意图是从字面上设置最大年龄可能是合乎逻辑的事情:

cookie.setMaxAge(Integer.MAX_VALUE);

但是,这会导致 cookie HTTP 标头中根本没有 Expires,我正在 WebSphere 7 上对其进行测试。将其设置为 1 年(以秒为单位)可以正常工作。

为什么会这样?

PS 刚刚在Tomcat7上测试过——Integer.MAX_VALUE的结果是Max-Age=2147483647; Expires=Wed, 06-Mar-2080 21:30:32 GMT,所以肯定是WebSphere有问题。

【问题讨论】:

  • 是的,那是我的文章。但是里面没有关于 Integer.MAX_VALUE 的内容。
  • 快速测试,在 WebSphere 6.1 上按预期工作。我没有可供测试的 WebSphere 7 环境。您是否测试了其他过期值?
  • 我刚刚对 WAS 7 进行了快速测试,发现与您所做的相同。具有其他最大年龄的 Cookie 按预期创建,但不适用于最大年龄设置为 Integer.MAX_VALUE 或其他较大值的 Cookie。 (我尝试了一些任意大的值 - 1500000000 有效,但 2000000000 无效。)
  • 所以这一定是 WAS 7 中的一个错误。有人想向 IBM 报告吗?将很高兴接受说正在生成 APAR 的答案。

标签: java servlets cookies websphere


【解决方案1】:

http://www-01.ibm.com/support/docview.wss?uid=swg1PM34869 中描述了问题。 原因是一种千年问题:WAS7 将 cookies 日期写为 YY,WAS6 写为 YYYY

【讨论】:

    【解决方案2】:

    这个 setMaxAge 方法不是设置 cookie 的最大年龄,而是将 int 参数 seconds 添加到当前 SERVER 日期/时间,并将这个新的日期/时间值作为 cookie 的过期时间。稍后,当这个 cookie 被发送到浏览器时,这个过期日期会与 CLIENT 日期/时间进行比较,如果过期日期过去,cookie 就会过期。

    所以不要使用 setMaxAge(int) 使用日期和时间的方法。

    【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-30
    相关资源
    最近更新 更多