Cookie
- サーバーとクライアント間で状態を管理するためにクライアントのブラウザに保持される情報のことです。
- HTTPはステートレスなプロトコルであるため、状態を保持するために使用されます。
Cookie のやり取り
- サーバーからクライアントに Cookie を送る場合は Set-Cookie ヘッダーを使用します。
Set-Cookie: <cookie-name>=<cookie-value>
- クライアントからサーバーには Cookie ヘッダーで Cookie を送信します。
Cookie: <cookie-name>=<cookie-value>
Cookie の仕様
Expires/Max-Age
- Expires では有効期限を日時で指定します。
- Max-Age では有効期間を秒で指定します。
- Expires と Max-Age 両方指定された場合は Max-Age が優先されます。
Set-Cookie: Id=0001;Expires=Mon、1 Jan 2020 01:01:01 GMT;
Set-Cookie: Id=0p01;Max-Age=600;
Set-Cookie: Id=0001;Expires=Mon、1 Jan 2020 01:01:01 GMT;Max-Age=600;
Secure
- Secure を指定すると HTTPS 通信でのみ Cookie がサーバーに送信されます。
Set-Cookie: Id=0001;Secure;
HttpOnly
- HttpOnly を指定すると JavaScript の API(Document.cookie) から Cookie にアクセスすることが出来なくなります。
- XSS 対策として有効です。
SetCookie: Id=0001;HttpOnly;
Domain
- Domain で Cookie が送信される範囲を制限することが出来ます。
- Domain を指定した場合、指定されたドメインとサブドメインに Cookie が送信されます。
- 例えば Domain=sample.com とした場合、ドメインである sample.com の他にサブドメインである aaa.sample.com、bbb.sample.com にも Cookie は送信されます。
- Domain を指定しない場合は Set-Cookie を送信したホストのみに Cookie が送信されます。
- サブドメインに送信したくない場合は Domain を指定しないようにする必要があります。
Set-Cookie: Id=0001;Domain=sample.com;
Path
- Path を指定すると指定した値を URL を含む場合に Cookie を送信します。
- 例えば /root を指定した場合、/root/index.html、/root/Item/search.html 等 URL に Path で指定した値が含まれる場合に Cookie を送信します。
Set-Cookie: ID=0001;Path=/root;
Cookieの種類
セッションクッキー
- Expires または Max-Age が指定されていない Cookie のことです。
- 作成した Cookie はデフォルトでセッションクッキーです。
- クライアントがブラウザを終了した場合に Cookie が削除されます。
持続的クッキー
- 永続クッキーともいいます。
- Expires または Max-Age が指定された Cookie のことです。
- 指定された日時または期間が過ぎると Cookie が無効になります。
ファーストパーティクッキー
- 閲覧しているページのドメインが発行した Cookie のことです。
サードパーティクッキー
- 閲覧しているページとは異なるドメインが発行した Cookie のことです。
セッション
- HTTP はステートレスなプロトコルであるため、1回のリクエストに対して1回のレスポンスで通信は完結してしまい、各通信は別のものとして扱われます。
- システムにログインして買い物をする等の一連の通信を同一クライアントからの通信であると判別し管理する仕組みをセッション管理といいます。
- 通常、システムにログインするとサーバーがセッション ID を発行し、Cookie に付与してクライアントに送信します。以降クライアントは Cookie にセッション ID を付加し、リクエストを送信することでサーバーはどのクライアントからの通信であるかを判別します。
- サーバーではセッション ID ごとに情報を管理します。例えば、EC サイトの買い物カゴに入れた商品等。
参考
- https://qiita.com/mogulla3/items/189c99c87a0fc827520e
- http://www.atmarkit.co.jp/ait/articles/0810/21/news133_2.html
- http://www.yunabe.jp/docs/cookie_and_security.html
- https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies