プログラミングの用語一覧へ
このページの目次

セッションスコープとは?

読み方:セッションスコープ

最終更新:2026/08/18

3秒でわかる

同じ利用者からの複数のリクエストをまたいでデータを保持する範囲。ログイン状態やカートの中身のように、画面遷移しても消えては困る値を置きます。

もう少し詳しく

どういうものか

セッションスコープは、Java の Web アプリでデータを置く場所の広さを表す区分のひとつで、同じ利用者からの複数のリクエストをまたいでデータが生き続ける範囲を指します。実体は HttpSession で、サーバー側にデータを保管し、ブラウザには識別子 (JSESSIONID) だけを Cookie で渡す仕組みです。

保持されるのは、ブラウザを閉じるか、設定したタイムアウト時間が経過するまでです。既定値はサーブレットコンテナ側で決まっており、Tomcat では 30 分が一般的です。

なぜ必要か

HTTP はリクエストごとに完結し、前のリクエストのことを覚えていません。何もしなければ、ログイン画面で認証した次の瞬間、商品一覧を開いた時点で「誰なのか」が分からなくなります。

セッションスコープはこの断絶を埋めるための場所です。ログイン中のユーザー情報、カートの中身、複数画面にまたがる申込フォームの途中経過は、リクエストをまたいで残す必要があるためここに置きます。逆に、1 回の表示にしか使わない検索結果をここに置くと、利用者が増えたときにサーバーのメモリを圧迫します。

具体例

サーブレットでログイン情報をセッションに入れ、別のリクエストで取り出します。

// ログイン処理 (LoginServlet) User user = userService.authenticate(email, password); if (user != null) { HttpSession session = request.getSession(); session.setAttribute("loginUser", user); session.setMaxInactiveInterval(30 * 60); // 30 分で失効 response.sendRedirect("/items"); } // 別のリクエスト (ItemServlet) HttpSession session = request.getSession(false); // 無ければ作らない User loginUser = (session == null) ? null : (User) session.getAttribute("loginUser"); if (loginUser == null) { response.sendRedirect("/login"); return; }

似た用語との違い

スコープ生存範囲置くもの
リクエストスコープ1 リクエストの間だけ画面に渡す検索結果
セッションスコープ同じ利用者の一連の操作ログイン情報、カート
アプリケーションスコープアプリ全体で共有設定値、マスタ一覧


つまずきやすいところ

  • getSession()getSession(false) の違いを知らずに使う。引数なしは無ければ新規作成するため、ログイン判定に使うと必ず新しい空のセッションが作られ、未ログインを検出できません

  • ログイン成功後に session.invalidate() してから新しいセッションを作らず、セッション固定攻撃の余地を残す。ログイン直後にセッションを作り直すのが定石です

  • 大きなリストをセッションに入れっぱなしにする。同時利用者数だけ倍になるため、メモリ不足の原因になります

  • ログアウト処理で属性を 1 つ削っただけで済ませる。残りの属性が生き続けるので invalidate() でセッションごと破棄します
  • 覚え方

    リクエストは 1 画面かぎり、セッションは 1 人ぶん、アプリケーションは全員ぶん。この 3 段の広さで使い分けます。

    知識のつながり

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

    現在地セッションスコーププログラミング

    LEARN BY DOING

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

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

    この用語を扱うコース

    コース

    Java入門:基礎文法編

    69レッスン
    コース

    Spring Boot入門

    48レッスン
    コース

    Java 中級:コレクション・Stream・例外処理

    64レッスン
    Javaコースの全編を見る