何げなく仕様しているCookieだが、以外と仕様を正しく理解している人は少かったりする (わたしの周りだけだったりするかもしれないが..) 良い機会なので、RFCを読みかえしてみる、以下がRFCより抜粋した内容である
- クライアントが一度に溜めておくことができるCookieの数には限界が存在するこれは、クライアントが受け取り保存するために用意されるべきのCookie最小数の仕様である
- Cookieの数は、トータルで300個まで
- 1つのCookieにつき4KBまでで、name と OPAQUE_STRING は、4KBまでの形式に結合される
- サーバもしくはドメインごとに、クッキーの数は20個まで
RFCではCookieの最大サイズは4Kbyteという制約を設けているが、世の中の万物限度というものが存在しているようにCookieのサイズ指定があるのも例外ではないわけである。今回は4Kbyteという制限に注目し、本当に4Kbyteという制約は守られているのか、クライアント、サーバ側でテストをおこなってみた。
テスト内容
[クライアント側テスト環境]
OSパターン1 - Linux(CentOS4.4) OSパターン2 - Windows(XP) ブラウザパターン1 - Firefox2.0(Linux版) ブラウザパターン2 - Firefox2.0(Windows版)
[サーバ側テスト環境]
Cookie発行プログラム使用言語 - PHP5.2 Cookieの発行条件 - ブラウザ経由でアクセスした際に無条件でCookieを発行する
[Cookie発行PHPプログラム内容]
// 最大4092byte(4K)のデータを生成する
for ($i = 0; $i < 4092; $i++) {
$data .= 1;
}
setcookie(strlen($data),$data,time()+60,"/","hoge.jp");
テスト結果
Firefoxでは最大4092byteのCookieを取得する亊が確認できた。Cookieは名前も4Kの制限に含めるため
名前=値 4092=11111111111111111111111111111111111........1111 ↑ ↑ (4byte) (4092byte)
4 + 4092 = 4096 すなわち 4Kbyte となります。きっちり1024 X 4された4096Kbyteを閾値としているようだ。 サーバ側のCookie発行プログラムのfor文のループ階数を4092から4093に 変更した場合はFirefox側で受け取ってくれなかった。 最大値を超えたという判断をされるようだ。 4092byte以下のデータサイズであれば、当然問題なくCookie領域にセットができる。 このテスト結果よりFirefoxはLinux版、Windows版ともにRFCに準拠しているいえるのではないだろうか。流石だ!
Trackback URL
http://blog.fukaoi.org/2007/06/20/cookie?tb=y&entry_id=4
XML
