TERM 038
Session
複数の通信を、一つの利用状態としてつなぐ
Sessionは、独立したHTTPリクエストを同じ利用者や操作の流れとして関連付ける状態です。サーバー側の保存領域と、ブラウザが持つ推測困難な識別子を組み合わせる方式が一般的です。
複数の通信にまたがる利用者の状態を管理する仕組みの全体像。
CONTENTSこの記事の目次+
01 — DEFINITION
Sessionとは
何か
Sessionは、独立したHTTPリクエストを同じ利用者や操作の流れとして関連付ける状態です。サーバー側の保存領域と、ブラウザが持つ推測困難な識別子を組み合わせる方式が一般的です。
02 — HOW IT WORKS
仕組みを
3段階で見る
細部へ入る前に、入力から結果までの役割を順番に捉えます。
状態を作る
ログイン成功時に推測不可能なセッションIDを発行する。
→IDを送り返す
ブラウザがCookieなどを通じて各リクエストにセッションIDを付与する。
→状態を参照
サーバーがセッションIDから利用者と有効期限を確認する。
Sessionを理解するときの、最小の処理単位です。
03 — ESSENTIALS
押さえるべき
3つの要点
名前だけでなく、この3点の関係まで理解すると実装へつなげやすくなります。
推測困難なID
意味のある情報を直接入れず、十分な乱数で発行します。
セッション情報の保存先
複数サーバーから共有できる外部DBや分散キャッシュ(Redisなど)へ保存します。
有効期限
無操作時間と最大継続時間を決め、不要な状態を破棄します。
04 — REAL WORLD EXAMPLE
ログイン後の画面を継続利用する
HTTPは各要求が独立しているため、利用者を毎回結び付ける必要があります。
- 01
ログイン認証の成功時にサーバー側でセッションを生成する
- 02
セッションIDを安全なCookie(Secure/HttpOnly属性付き)に格納する
- 03
以降のリクエストごとにセッションIDを照合してユーザー情報を復元する
05 — WATCH OUT
理解するときの
注意点
便利な仕組みほど、守備範囲と失敗の前提を明確にします。
ログイン成功時にセッションIDを再発行する
未認証時の古いIDを破棄して新しいIDを再生成することで、セッション固定攻撃(Session Fixation)を防ぎます。
ログアウト時にサーバー側のセッションも破棄する
ブラウザ側のCookieを消去するだけでなく、サーバー側に保存されているセッションデータも明示的に無効化します。
IN ONE SENTENCE
Sessionとは?
複数の通信にまたがる利用者の状態を管理する仕組み。
