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 毎回個数がかわる。

iPhone

ブラウザ バージョン 個数 備考
mobile safari iPhone OS 4_2_1 50 iPhone simulatorだと無限に入るので注意。必ず実機で確認

Android

ブラウザ バージョン 個数 備考
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