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