ドメインあたりのクッキー数上限と上限に達した場合の挙動
BrowserStack にてそれぞれデフォルト設定のブラウザで調査。IE 中心に調べたので他のブラウザは網羅的ではない。あとから補完して別途公開したい。
サマリー
最も一般的な挙動は、追加日時 (おそらく最終更新日時) が古いものを一件削除し、新しいクッキーを受け入れるという、LRU 的なアルゴリズム。ここからブラウザやバージョンによってバリエーションがある。
- Chrome は一件ではなく一度に三十件削除する
- その代わり受け入れるクッキー数は多め
- バックエンドを Chromium (Blink) に切り替えてからの Opera も同様
- 古い Opera は、追加しようとしたクッキーを受け入れ、その次に新しいもの一件を削除する。
- Safari は単に追加順ではなく独自のソート順でクッキーを管理。その降順または昇順で一件を削除する。
- バージョンによって動きがばらばらなので、詳しく調査したい。
IE
OS | Browser | Max cookie per domain | Behavior |
---|---|---|---|
WinXP | IE6 | 20 | 追加されたのが最も古いクッキー一件を削除 |
WinXP | IE7 | 50 | 追加されたのが最も古いクッキー一件を削除 |
WinXP | IE8 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win7 | IE8 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win7 | IE9 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win7 | IE10 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win7 | IE11 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win8 | IE10.0 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win8 | IE10.0 Desktop | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win8.1 | IE11.0 | 50 | 追加されたのが最も古いクッキー一件を削除 |
Win8.1 | IE11.0 Desktop | 50 | 追加されたのが最も古いクッキー一件を削除 |
Firefox
OS | Browser | Max cookie per domain | Behavior |
---|---|---|---|
Win8 | Firefox 16.0 | 150 | 追加されたのが最も古いクッキー一件を削除 |
WinXP | Firefox 25.0 | 150 | 追加されたのが最も古いクッキー一件を削除 |
Mac OSX Mavericks | Firefox 27.0 | 150 | 追加されたのが最も古いクッキー一件を削除 |
Chrome
OS | Browser | Max cookie per domain | Behavior |
---|---|---|---|
Win8 | Chrome 22.0 | 180 | 古いものから30件を削除 |
WinXP | Chrome 31.0 | 180 | 古いものから30件を削除 |
Mac OSX Mavericks | Chrome 33.0 | 180 | 古いものから30件を削除 |
Opera
OS | Browser | Max cookie per domain | Behavior |
---|---|---|---|
Mac OSX Mavericks | Opera 11.0 | 60 | 追加されたのが新しいクッキー一件を削除 (set しようとしたクッキーは受け入れ、その次に新しいものを削除する) |
Win8 | Opera 12.0 | 60 | 追加されたのが新しいクッキー一件を削除 (set しようとしたクッキーは受け入れ、その次に新しいものを削除する) |
WinXP | Opera 17.0 | 180 | 古いものから30件を削除 |
Mac OSX Mavericks | Opera 19.0 | 180 | 古いものから30件を削除 |
- opera は Version 12 を最後にレンダリングエンジンを Presto から Blink に切り替えている。
Safari
OS | Browser | Max cookie per domain | Behavior |
---|---|---|---|
Mac OSX Snow Leopard | Safari 4.0 | なし (容量制限のみ) | 追加されたのが最も古いクッキー一件を削除 |
Mac OSX Snow Leopard | Safari 5.0 | なし (容量制限のみ) | 追加されたのが最も古いクッキー一件を削除 |
Mac OSX Lion | Safari 5.1 | なし (容量制限のみ) | 保持しているクッキーの並び順で若い方から一件を削除 |
Mac OSX Lion | Safari 6.0 | なし (容量制限のみ) | 保持しているクッキーの並び順で若い方から一件を削除 |
Mac OSX Mavericks | Safari 7.0 | なし (容量制限のみ) | 保持しているクッキーの並び順で遅い方から一件を削除 |
- Safari 4.0 のクッキーは追加日時の降順 (新しいものが先頭、古いものが後方) にならぶ。他のブラウザは昇順だった。
- Safari 5.1〜6.0 のクッキーは単に追加順ではなく、一定の法則でソートし保存されている。削除はこのソート順に行われるようだ。ソートの方法は短時間に cookie が set された場合、そのうちいくつかをまとめて辞書順に登録しているように見える。サーバサイドからの Set-Cookie ヘッダをどう処理しているかはこの調査からはわからないので、別途。
- Safari 7.0 は逆にソートの降順に一件削除している。
Safari の動きは不可解なので、より詳細に調査したい。
スクリプト
検証に使ったスクリプトはこちら
おおまかな動きは次のようなシンプルなもの
- js で document.cookie に一件ずつクッキーを書き込み
- 容量制限に引っかからないよう、キーは二文字、値は “1” という一文字にする
- expire はランダムな未来の日付
- “書き込み試行回数 != document.cookie に入っているクッキー数” になった時点で、処理を終了
- 書き込み試行回数、現在のクッキー数、document.cookie の中身を表示