What is this?
Sessionと Cookieについて言語化して整理したもの。メモ書き。
assumption
HTTP通信における話に焦点が当たりがち
Cookie
- Webブラウザに保存されたデータのこと
- CookieはサーバーからのHTTPレスポンスのSet-Cookieヘッダーを使用してWebブラウザに送られ、テキストファイル形式で保存される
- 保存されたCookieはクライアントからサーバーにリクエストするたびに自動送信される
- 有効期限が設定されていないCookieは、Webブラウザが閉じられると一緒に削除される(「セッションCookie」とも言う)
- 有効期限が設定されたCookieは、期限が過ぎるまではWebブラウザを閉じても削除されない
- 「クッキー名=値」の形(1つのクッキーは4KBまで)
- HTML DOMの一部としてアクセスできる
- Session IDをCookieに格納する用途で使用されることが多い
Session
- 一連の処理の始まりから終わりまでを表す概念(HTTP通信においては通信の確立から遮断までを指す)
- セッション情報はサーバーに保存されることが多い
- セッションはWebブラウザを閉じるまで保存する
- リンクなどでページを移動しても内容を保持することができる
HTTPにおけるSessionとCookie
CookieにSession IDを格納することで、HTTPにステートフルな性質を持たせることを実現している。 HTTPはサーバーが一連の処理の状態などを記憶しないという性質(ステートレス)を持っているため、ログイン情報を記憶させる、ショッピングカートの商品情報を記憶させることが出来ない。
Sessionがそれらの情報を記憶して、CookieにSession IDを格納することでHTTP通信においてサーバーが一連の処理の状態などを記憶する性質(ステートフル)を付与することができる。
セキュリティ
- セッションハイジャック:Session IDを第三者が傍受することで、Sessionが保持している認証情報などを使ってなりすますことができる
- トラッキング・クッキー:Cookieはそのユーザからの他の要求と関連付けることができる。インターネット広告の配信において、バナー広告は、業者のサーバ(サードパーティー)へのリンクを介して画像を取得する形式が一般的である。クッキーはHTMLに限らず、画像にも設定することができる。HTTPではリンク元のURL情報も送信することが一般的なので、結果として広告業者は、同社を利用するすべてのサイトを対象としてそのユーザのアクセス履歴を把握することが可能になる。