HTTPのCookieの基礎


HTTP Cookie(ブラウザのCookie)はブラウザとサーバ間でHTTPでの通信で送信する小さなデータです。HTTPプロトコルのアクセスでは状態を持たない(あるリクエストに対して常に同じ結果を返す)ことを実現するため、代わりにCookieが状態を記憶します。

🐡 Cookieの主な利用用途

  • セッションの管理(ユーザーログインなど)
  • トラッキング(ユーザーの行動分析のため)
  • ユーザーの設定情報

また、Cookieはクライアント側の記憶領域として利用されてきましたが、全HTTPリクエストで送信されるため、モバイルなどでの通信のパフォーマンスを低下させます。そこで、Web Storage APIやIndexedDBなどの新しいAPIが使われ始めています。

🎂 Cookieの送受信の流れ

サーバがHTTPレスポンスCookieを送信

HTTPリクエストを受け取ったサーバが、レスポンスでSet-Cookieヘッダを送信します。

Set-Cookie: <cookie-name>=<cookie-value>

ブラウザがCookieヘッダで送信

ブラウザはCookieを保存し、その後のリクエストでCookie HTTPヘッダでCookieを送信します。

GET /sample.html HTTP/1.1
Host: www.example.com
Cooke: cookie-name1=cookie-value1; cookie-name2=cookie-value2

上記の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のスコープの制限

DomainPathを指定することで、Cookieの返送すべきURLを制限できます。

Set-Cookie: cookie-name1=cookie-value1; Domain=example.com Path=/doc

📚 おすすめの書籍