blog


あくなき追求、深追いこそ永遠の目標

以外と知らないCookieの仕様

Cookie

何げなく仕様している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を発行する
<?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に準拠しているいえるのではないでしょうか。流石でした!


 
投稿日:2007/06/20 | カテゴリ:RFC | コメント:(0)