Web・インターネットの用語一覧へ
このページの目次

session.invalidateとは?

読み方:session.invalidate

最終更新:2026/08/18

3秒でわかる

サーバー側が持っているセッションを明示的に破棄する処理。ログアウトやログイン直後の張り替えで呼び、なりすましを断ち切るために使います。

もう少し詳しく

どういうものか

session.invalidate() は、サーバーが保持しているセッションの実体と、そこに入れたすべての属性を破棄する呼び出しです。Java のサーブレット API では HttpSession#invalidate、Express の express-session では req.session.destroy が同じ役割を担います。

破棄されるのはサーバー側の記録です。呼んだ後は、そのセッション ID を持ったリクエストが来ても「知らない ID」として扱われます。

なぜ必要か

ログアウトのときに画面遷移だけして中身を消さないと、セッション ID は生き続けます。共用 PC でブラウザの戻るボタンを押されたり、ログ等から ID を拾われたりすれば、その ID でログイン済みとして扱われてしまいます。破棄はログアウトを成立させる本体です。

もう1つの用途がセッション固定攻撃への対処です。攻撃者が用意した ID を利用者に使わせておき、ログイン成功後にその ID で入り込む、という手口があります。ログインが通った直後に一度破棄して新しい ID を発行すれば、攻撃者の手元の ID は無効になります。

具体例

@PostMapping("/logout") public String logout(HttpServletRequest request, HttpServletResponse response) { <a href="/glossary/httpsession" class="text-primary font-medium underline underline-offset-2 hover:text-primary-dark">HttpSession</a> session = request.getSession(false); // 無ければ作らない if (session != null) { session.invalidate(); } Cookie cookie = new Cookie("JSESSIONID", null); cookie.setMaxAge(0); cookie.setPath("/"); response.addCookie(cookie); // ブラウザ側の残骸も消す return "redirect:/login"; }

つまずきやすいところ

  • 破棄した後の変数を触って落ちる。invalidate 済みのセッションに getAttribute すると IllegalStateException が飛びます

  • getSession() を引数無しで呼ぶ。無ければ新しく作ってしまうので、ログアウト処理で空のセッションが増えます

  • サーバー側だけ消してブラウザの Cookie を放置する。次のアクセスで使えない ID が送られ続けます

  • ログイン後の張り替えを忘れる。ログアウト時だけ消しても、セッション固定攻撃は防げません
  • 似た用語との違い

    操作消えるもの
    invalidateサーバー側のセッション実体と全属性
    removeAttribute指定した1つの値だけ。セッションは生きたまま
    Cookie の削除ブラウザが送る ID だけ。サーバー側は残る


    覚え方

    ログアウトは「画面を戻すこと」ではなく「サーバーの記憶を消すこと」。記憶を消す呼び出しが invalidate です。

    知識のつながり

    サイドバーと同じ推奨ルート・関連語を、まとめて確認できます。

    現在地session.invalidateWeb

    LEARN BY DOING

    この用語を、教材で使ってみる

    直接関連する編と、その編を含むコースです。用語だけで終わらず、ブラウザ上で実際に手を動かせます。

    Javaコースの全編を見る