2

当用户有一个关联的HttpSession对象然后想要“注销”应用程序时,您将使该应用程序无效,HttpSession这反过来又会将其从 ServletContext 保留的所有会话的映射中删除。但这只会在服务器端删除它,在客户端会发生什么?用户是否仍然保留带有会话 ID 的 cookie,该会话 ID 现在在服务器上不再具有相应的会话对象并继续将其发送到网络服务器?当用户退出后想再次登录时会发生什么?

4

2 回答 2

3

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

于 2012-04-19T13:57:54.703 回答
3

我想补充一下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。因此,服务器可以通过向客户端发送最大年龄为 0 的相同 cookie 来请求客户端删除 cookie。

于 2013-01-08T12:12:32.797 回答