Cookieのメモ

(2017-02-22)

https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

レスポンスにSet-Cookieヘッダーが含まれていればブラウザはcookieに保存する。

HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry

リクエスト時にはCookieヘッダーにcookieを入れて送る。

GET /sample_page.html HTTP/1.1
Host: www.example.org
Cookie: yummy_cookie=choco; tasty_cookie=strawberry

CookieにExpire(ある期間まで有効)またはMax-Age(特定の期間の間有効)を設定するとPermanent cookieとなる。 いずれも設定しなかった場合Session cookieとなり、ブラウザを閉じると削除されることになっているが、 ブラウザのセッション復元機能が有効になっていれば永続化される。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;

Secureを付けるとHTTPSでのみ送られる。 また、HttpOnlyはjsからdocument.cookieなどでアクセスすることができなくなる。 サイトにXSSの脆弱性があるとき、cookieが盗まれてしまうのを防ぐことができるので問題なければ設定するべき。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

Domainを指定するとそのドメインとサブドメインへのリクエストのときに送られる。しないとそのドメインだけ。Pathも指定できる。

Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Domain=example.com; Path=/

リクエストが飛び、Set-Cookieヘッダーを受け取ればCookieに書かれるので、アクセスしたサイトのドメイン以外のCookieが書かれることがある。 このようなCookieを3rd party cookieといって、広告のトラッキングによく使われるが、 Safariなどのデフォルト設定では書き込めなくなっている。