HTTP Cookie(ブラウザのCookie)はブラウザとサーバ間でHTTPでの通信で送信する小さなデータです。HTTPプロトコルのアクセスでは状態を持たない(あるリクエストに対して常に同じ結果を返す)ことを実現するため、代わりにCookieが状態を記憶します。
😎 Cookieの主な利用用途
- セッションの管理(ユーザーログインなど)
- トラッキング(ユーザーの行動分析のため)
- ユーザーの設定情報
また、Cookieはクライアント側の記憶領域として利用されてきましたが、全HTTPリクエストで送信されるため、モバイルなどでの通信のパフォーマンスを低下させます。そこで、Web Storage APIやIndexedDBなどの新しいAPIが使われ始めています。
😸 Cookieの送受信の流れ
サーバがHTTPレスポンスCookieを送信
HTTPリクエストを受け取ったサーバが、レスポンスでSet-Cookie
ヘッダを送信します。
Set-Cookie: |
ブラウザがCookieヘッダで送信
ブラウザはCookieを保存し、その後のリクエストでCookie HTTPヘッダでCookieを送信します。
GET /sample.html HTTP/1.1 |
上記のCookeはセッションの間だけ保持されます。ただし、近年のブラウザはセッションを復元できることが多く、再アクセスするとセッションが継続したかのように振る舞います。
🏀 Cookieで設定可能なこと
Cookieの有効期限の設定(継続的なCookie)
Expires
を設定することで「指定した日時, 期間」にCookieを継続できます。
Set-Cookie: cookie-name1=cookie-value1; Expires=Wed, 21 Oct 2015 07:28:00 GMT; |
セキュアCookie
Secure
を付与することでHTTPSプロトコルでのリクエストの場合に限り、サーバへCookieを送信します。しくみ上安全ではないので、機密情報は送らないようにしましょう。
Set-Cookie: cookie-name1=cookie-value1; Secure; |
HttpOnlyフラグ
HttpOnly
フラグを付与することでJavaScriptによるCookieアクセスをできないようします。XSSなどの対策として有効です。
Set-Cookie: cookie-name1=cookie-value1; HttpOnly; |
Cookieのスコープの制限
Domain
とPath
を指定することで、Cookieの返送すべきURLを制限できます。
Set-Cookie: cookie-name1=cookie-value1; Domain=example.com Path=/doc |