blog

Java、PHP、C++、MySQL、Apache、Linux、UnixなどのTechを紹介

 Mainへ  | Windows Vistaのリモートデスクトップをマルチセッションに対応させる »
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を発行する

[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 | コメント・TrackBack:(0)



Trackback URL

http://blog.fukaoi.org/2007/06/20/cookie?tb=y&entry_id=4

コメントはこちらからどうぞ

 
 
 

入力された内容