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ヘッダで送信

ブラウザは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

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍