HttpServletRequestのgetSession().invalidate()を実行してセッションを無効化

HttpServletRequestを使い、getSession().invalidate()を実行するとどうなるのか

HttpServletRequestを使ってgetSession().invalidate()を実行すると、そのリクエストに関連付けられたセッションが無効になります。
具体的には、次のようなことが起こります。

1. セッション無効化:

  • 現在のセッションが無効になり、サーバーはそのセッションに関連するすべての情報を破棄します。

もちろんセッション属性として保存されていたデータも含まれます。

2. 新しいセッションIDの割り当て:

  • 次に新しいセッションが作成される際には、新しいセッションIDが割り当てられます。

これは、ユーザーが次にサーバーにアクセスしたときに発生します。

3. クッキーの削除:

  • サーバーはセッションIDをクライアントにクッキーとして送信している場合、セッションの無効化によってそのクッキーも無効になります。

4. セッションイベントのトリガー:

  • セッションの無効化により、HttpSessionListenerなどのセッションリスナーが登録されている場合、sessionDestroyedメソッドが呼び出されます。

簡単な例として、次のようにgetSession().invalidate()を使用することができます。

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LogoutServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) {
        // セッションを取得し、無効化する
        request.getSession().invalidate();
        
        // ログアウト後のリダイレクト先を設定
        response.sendRedirect("login.jsp");
    }
}

このコードでは、HttpServletRequestからセッションを取得し、それを無効化しています。
次に、ユーザーをログインページにリダイレクトしています。
例えば認可周りの処理で、何かしら処理が継続できないような例外が発生した場合に使えそうな処理ですね。