セッションとは
セッションは、複数の要求を同じ利用者やログイン状態として扱うための、一時的な状態管理の仕組みです。英語ではsession(セッション)と表します。
HTTPの要求は一回ずつ独立しています。Webアプリケーションは、ブラウザーが返す予測困難な識別子とサーバー側の記録を対応させ、「同じ買い物かご」「同じログイン済み利用者」と判断します。
セッションは通信接続そのものではありません。同じTCP接続を再利用しても別利用者の要求になり得ますし、接続が替わっても同じセッションIDなら状態を継続できます。

生成から破棄までを切らずに設計する
- Create最初の訪問やログイン成功時に、十分なrandomnessを持つ識別子とサーバー側レコードを作る。
- Bind識別子をCookieなどで返し、後続要求を同じ一時状態へ結び付ける。
- Renewログイン・権限上昇などセキュリティ段階が変わる境界で新しい識別子へ交換する。
- Expire無操作時間と絶対有効期間を超えたレコードをサーバー側で無効にする。
- Destroyログアウト、パスワード変更、不審検知時に該当セッションを破棄し、再利用を拒否する。
認証・セッション・認可は別の判断
認証は「誰としてログインするか」を確認し、セッションはその結果を後続要求へつなぎます。認可は、その利用者が対象データを読んだり変更したりできるかを要求ごとに判断します。
有効なセッションだから全リソースを許可してよいわけではありません。URLやアカウントIDが変わるたび、サーバーが所有者・役割・操作権限を検査します。
セッションIDは秘密の代理鍵として扱う
攻撃者が有効なIDを盗めば、パスワードを知らなくても利用者になり済ませる場合があります。HTTPS、Secure・HttpOnly・SameSite付きCookie、短い期限、ログへのマスキングを組み合わせます。
IDをURLへ入れると履歴、ブックマーク、Referer、アクセスログ、画面共有へ残りやすいため避けます。値に利用者名や権限を平文で埋め込まず、暗号学的に安全な乱数生成器を使います。
固定化と乗っ取りは入口が違う
session fixation(セッション・フィクセーション/固定化)は、攻撃者が知っているIDを被害者に使わせ、そのままログイン後の状態へ昇格させます。ログイン成功時にIDを再生成して切ります。
session hijacking(セッション・ハイジャッキング/乗っ取り)は、成立済みIDをXSS、マルウェア、ネットワーク、ログなどから盗んで再利用します。失効、端末一覧、重要操作の再認証で被害を限定します。
ブラウザーを閉じることとログアウトは同じではない
永続Cookieなら再起動後もIDが残り、セッションCookieでもブラウザーの復元機能で扱いが続く場合があります。確実なログアウトはサーバーへ破棄を要求し、クライアント側Cookieも削除します。
複数端末ではセッションを一括で消すか、現在の端末だけ消すかを区別します。パスワード変更やアカウント復旧では、他セッション・更新トークンをどう扱うかを明示します。
状態をトークンへ入れる方式でも失効は必要
署名付きトークンへclaimを入れ、サーバー側セッション保存を減らす設計もあります。しかし盗用耐性が自動で上がるわけではなく、期限、鍵回転、ログアウト時のrevocation、権限変更の反映方法が必要です。
安全なセッション管理はIDの生成だけでなく、権限境界での更新、要求ごとの認可、利用者が確認できる端末一覧、サーバー側での即時失効までを含みます。
Web sessionの構造とlife cycleの確認資料:OWASP「Session Management Cheat Sheet」