【せっしょんかんり】

セッション管理 とは?

💡 「ログイン中」の状態を安全に管理する
📌 このページのポイント
セッション管理の仕組み ブラウザ Cookie保持 セッションID送信 ログイン セッションID サーバー セッション生成 ユーザー情報を紐付け セッションストア ID → ユーザー情報 有効期限を管理 セッションのライフサイクル 作成 ログイン時 維持 リクエスト毎 更新 期限延長 破棄 ログアウト/期限切れ セッションハイジャック対策: HTTPS必須・セッションID再生成
セッション管理のイメージ
ひよこ ひよこ

なぜセッションが必要なの?

ペンギン先生 ペンギン先生

HTTPはステートレス(状態を持たない)プロトコルだから、リクエストごとに「誰がアクセスしているか」がわからない。ログイン後にセッションID(ランダムな文字列)をCookieに設定し、サーバー側でセッションIDとユーザー情報を紐付けることで「この人はログイン済み」と判定するんだよ

ひよこ ひよこ
ペンギン先生 ペンギン先生

他人のセッションIDを盗んで「なりすまし」をする攻撃。盗む方法は①XSS攻撃でCookieを抜き取る、②通信の盗聴(HTTPだとセッションIDが平文)、③セッション固定攻撃(攻撃者が設定したセッションIDでログインさせる)。対策はSecure/HttpOnly属性のCookieHTTPS強制、ログイン時のセッションID再生成だよ

ひよこ ひよこ

JWTセッションの違いは?

ペンギン先生 ペンギン先生

セッションサーバー側に状態を保持(ステートフル)。JWTトークン自体にユーザー情報を含む(ステートレス)。セッションサーバーのメモリやRedisが必要だけど即座に無効化できる。JWTサーバー負荷が少ないけど有効期限前の無効化が難しい。マイクロサービスではJWTモノリスではセッションが多いよ

ひよこ ひよこ

安全な実装のポイントは?

ペンギン先生 ペンギン先生

セッションIDは暗号学的に安全な乱数で生成(予測不可能に)、②Cookie属性はSecure、HttpOnly、SameSite=Lax/Strictを設定、③ログイン成功時にセッションIDを再生成(固定攻撃防止)、④適切なタイムアウト(30分無操作で失効等)、⑤ログアウト時にサーバー側でもセッションを破棄。フレームワークの機能を使うのが最も安全だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
セッション管理」って出てきたら「ログイン状態を安全に維持する仕組み」と思えればだいたいOK!
📖 おまけ:英語の意味
「Session Management」 = セッション管理
💬 Session(会合・期間)をManagement(管理)する。ユーザーとサーバーの「会話の期間」を管理するよ
← 用語集にもどる