2

ユーザーが関連付けられたHttpSessionオブジェクトを持っていて、アプリケーションから「ログアウト」したい場合は、そのオブジェクトを無効にしHttpSessionます。これにより、ServletContextがすべてのセッションで保持するマップからオブジェクトが削除されます。しかし、これはサーバー側でのみ削除されます。クライアント側ではどうなりますか?ユーザーは、サーバー上に対応するセッションオブジェクトがなくなったセッションIDでCookieを保持し続け、これをWebサーバーに送信し続けますか?また、ユーザーがログアウト後に再度ログインしたい場合はどうなりますか?

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)です。最大経過時間を0に設定すると、Cookieを削除する必要があります。したがって、サーバーは、最大経過時間が0の同じCookieを送信することにより、クライアントにCookieを削除するように要求する場合があります。

于 2013-01-08T12:12:32.797 に答える