我有一个在旧的修改过的Tomcat安装上运行的Web应用程序。为了在注销后删除会话cookie,我有以下代码:
Cookie sessionCookie = new Cookie("session",null);
sessionCookie.setMaxAge(0);
response.addCookie(sessionCookie);
在我的网络应用程序中,我遇到的问题是它将当前时间作为cookie的过期部分返回:
Set-Cookie: sesssion=null; Expires=Sat, 18-Feb-2012 18:04:52 GMT
问题是它只需要客户端的PC稍微落后于服务器就可以继续发送cookie!
但是,在Tomcat 5.5中,它返回:
Set-Cookie: session=null; Expires=Thu, 01-Jan-1970 00:00:10 GMT
这是更理想的行为。
我的问题是正确的,是否有关于如何实施的官方指南,文档只是声明:
零值会导致cookie被删除。
也许我必须自己添加Set-Cookie:标头来解决这个问题?
答案 0 :(得分:1)
规范中似乎没有任何关于该方法实现的具体内容。
但是,您永远不应该依赖浏览器立即删除cookie,您甚至不应该依赖浏览器删除cookie,因为从服务器上您根本无法控制客户端行为。
你在那个cookie中存储了什么,你能简单地使用已经由容器管理的会话吗?
当您在服务器上使会话无效时,即使cookie保留在浏览器上也没关系,因为它将在服务器端失效,并且cookie中的会话ID将不再与现有会话匹配,并且对象是绑定到该会话将被销毁。
答案 1 :(得分:0)
如果过期时间< =当前时间,浏览器将过期cookie。
如果您是手动操作,大多数人会返回0个纪元(这是您在tomcat 5.5中看到的)或者至少是当前时间减去一些时间来计算时钟漂移。话虽这么说,你永远不能说最终用户的计算机时钟完全被淹没。
即使是tomcat 5.5也是旧软件。它的EOL是今年9月(2012年)。听起来你的问题是你正在运行一个尚未升级或维护的古老版本的tomcat(或java)。有时你做必须升级。