与Cookie.setMaxAge(Integer.MAX_VALUE)有什么关系?

时间:2012-02-17 16:05:27

标签: java servlets cookies websphere

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的错误。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

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