Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Cookie.setMaxAge(0)的行为是由实现决定的,还是有规范?_Java_Jakarta Ee_Tomcat - Fatal编程技术网

Java Cookie.setMaxAge(0)的行为是由实现决定的,还是有规范?

Java Cookie.setMaxAge(0)的行为是由实现决定的,还是有规范?,java,jakarta-ee,tomcat,Java,Jakarta Ee,Tomcat,我有一个web应用程序运行在一个旧的修改过的Tomcat安装上。为了在注销后删除会话cookie,我有以下代码: Cookie sessionCookie = new Cookie("session",null); sessionCookie.setMaxAge(0); response.addCookie(sessionCookie); 在我的web应用程序中,我遇到了一个问题,它返回当前时间作为cookie的过期部分: Set-Cookie: sesssion=null; Expires=

我有一个web应用程序运行在一个旧的修改过的Tomcat安装上。为了在注销后删除会话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:header来避免这种行为?

如果过期时间超过,浏览器将使Cookie过期规范中似乎没有关于该方法实现的非常具体的内容

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

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


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

这很复杂。它是一个私有服务器,覆盖了许多servlet部分,您根本无法使会话无效,调用这些方法会导致错误。cookie是会话id和负载平衡器的令牌。现在,如果客户端的时钟错误,负载平衡器会完全拒绝请求,因为“null”的格式不正确。但是,如果我允许它传递原始会话/令牌,则该会话现在已标记为注销,无法用于安全,因此无论哪种方式,时钟错误的用户都必须重新启动浏览器@艾伦:浏览器不应该被重定向到登录页面吗?@SkipHead它仍然会使用旧的会话ID,因为服务器不允许我们失效和创建新会话,服务器生成新会话ID的唯一方法是如果cookie中没有传递会话-我继承了它,并且不会将服务器软件用于任何其他项目。@Alan:哇,这太糟糕了。我的哀悼。对不起,我没有建设性的帮助。