cookieの制限について調べてみた
仕様
RFC 2109(obsolete)に規定
http://www.ietf.org/rfc/rfc2109.txt
形式
・key=valueでひとつ
個数
・1ブラウザにつき最低300個
・1ホスト(ドメイン)につき最低20個
サイズ
・cookie1つあたり最低4kbyte
ブラウザ実装状況
JavaScriptによりjQuery Cookieプラグインを利用し実験
サーバサイドの言語でやると別の結果になるかも。。。
Win xp
ブラウザ | バージョン | 個数 | 備考 |
---|---|---|---|
IE | 6/7 | 50 | - |
FireFox | 4.0 | 50 | - |
Opera | 11.0 | 60 | - |
Safari | 3.2 | 無限 | ブラウザには1万個までセットできた。しかしセットは可能だが取得時に4kbyteに達した時点までしかとれない |
Chrome | - | 150〜170 | 毎回個数がかわる。 |
Mac snow lepard
ブラウザ | バージョン | 個数 | 備考 |
---|---|---|---|
FireFox | 3.6 | 50 | - |
Opera | 11.0 | 60 | - |
Safari | 5.0 | 無限 | ブラウザには1万個までセットできた。しかしセットは可能だが取得時に4kbyteに達した時点までしかとれない |
Chrome | 11.0 | 150〜170 | 毎回個数がかわる。 |
ブラウザ | バージョン | 個数 | 備考 |
---|---|---|---|
mobile safari | iPhone OS 4_2_1 | 50 | iPhone simulatorだと無限に入るので注意。必ず実機で確認 |
ブラウザ | バージョン | 個数 | 備考 |
---|---|---|---|
chrome lite | Android 2.2 | 50〜55 | 毎回個数がかわる。 |
わかったこと
- セットし個数が上限に達すると古いものから削除される
- 仕様では20個だけど、どのブラウザも50個はいけるみたい
- 個数とサイズ、どちらからの制限に達した時点でSET(もしくはGET)できなくなる
注意点
Cookieサイズが大き過ぎるとHTTPリクエストヘッダのサイズも同時に肥大化する。
ApacheだとLimitRequestFieldSize ディレクティブにてHTTPリクエストのヘッダ
のサイズを制限しているため、その制限を超えないようにする必要もある
ちなみにLimitRequestFieldSize ディレクティブのデフォルトは8190byte
http://httpd.apache.org/docs/2.0/mod/core.html#limitrequestfieldsize