繁体   English   中英

Java Cookie.setMaxAge(0)的行为是否归因于实现,还是有规范?

[英]Is the behaviour of Java Cookie.setMaxAge(0) down to implementation or is there a specification?

我有一个在旧的修改过的Tomcat安装上运行的Web应用程序。 为了注销后删除会话cookie,我有以下代码:

Cookie sessionCookie = new Cookie("session",null);
sessionCookie.setMaxAge(0);
response.addCookie(sessionCookie);

在我的Web应用程序中,我有一个问题,因为它在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:标头才能解决此问题?

规范中似乎没有关于该方法的实现非常具体的说明。

但是,您永远不应该依赖浏览器立即删除cookie,甚至不应该依赖浏览器完全删除cookie,因为从服务器根本就无法控制客户端的行为。

您存储在该Cookie中的内容是什么,您可以简单地使用容器已经管理的会话吗?

当您使服务器上的会话无效时,即使cookie停留在浏览器上也没关系,因为它将在服务器端无效,并且cookie中的会话ID将不再与现有会话匹配,并且绑定到该对象的对象也将不再匹配。会话将被销毁。

如果到期时间<=当前时间,浏览器将使cookie到期。

如果您手动执行此操作,那么大多数人会返回0个纪元(这是您在tomcat 5.5中看到的),或者至少返回当前时间减去某个时间来解决时钟漂移。 话虽如此,您永远无法解释最终用户的计算机时钟已完全中断。

甚至tomcat 5.5也是旧软件。 EOL是今年9月(2012)。 听起来您的问题是您运行的是旧版的tomcat(或Java),但尚未升级或维护。 有时您确实需要升级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM