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的错误。
答案 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)而是使用带有日期和时间的方法。