会话无效

时间:2012-04-19 13:37:53

标签: java java-ee httpsession

当用户有一个关联的HttpSession对象,然后想要“注销”该应用程序时,您将使HttpSession无效,而{{1}}会将其从ServletContext保留的地图中删除会话。但是这只会在服务器端删除它,客户端会发生什么?用户是否仍然使用会话ID保持cookie,该会话ID现在不再在服务器上具有相应的会话对象并继续将其发送到Web服务器?当用户想要在注销后再次登录时会发生什么?

2 个答案:

答案 0 :(得分:2)

我想仍然会保留sessionId cookie,但由于此sessionId将不匹配服务器内存中的任何会话对象,因此下次用户再次尝试登录时,服务器将丢弃该会话对象。在服务器端,它将非常透明,request.getSession()将自动返回一个新的会话对象。

答案 1 :(得分:1)

我想补充 maksimov 的答案。

虽然cookie仍然存在于客户端,但服务器也可以在客户端删除cookie。 Spring Security会在用户注销时执行此操作。这是代码:

Cookie cookie = new Cookie(cookieName, null);
String cookiePath = //cookie's path
cookie.setPath(cookiePath);
cookie.setMaxAge(0);
response.addCookie(cookie);

重要说明是cookie.setMaxAge(0)。将max age设置为0表示必须删除cookie。因此,服务器可以通过向cookie发送最大年龄为0的相同cookie来要求客户端删除cookie。