プログラミング雑記

ドメインごとに発行できるcookieの上限と上限を超えた時の挙動

goke

個人開発から世界を変えるようなプロダクトづくりを目指しています

はじめに

flowの開発でcookieを利用したのですが、そういえばcookie発行の上限がどれくらいなのか知らなかったので調べてみました。
その結果、こちらの記事が出てきたのですが、2013年の記事ということもあって内容が古そうでした。
そこで実際に挙動を調べてみたのでまとめます。

cookie発行上限と挙動

調べた方法は単純で、ページをリロードするたびに新しいcookieを発行するコードを組んでリロードしまくってみました。

<?php
$cookie_name = count($_COOKIE) + 1;
$cookie_value = count($_COOKIE) + 1;
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
echo count($_COOKIE) . "<br>";
$cnt = 1;
foreach($_COOKIE as $cookie){
  echo "[" . $cnt . ":" . $cookie . "] ";
  $cnt++;
}
?>

簡単に説明すると、
ページを読み込む度に「N」と名前をつけてN個目のcookieを発行。
ページの1番上に発行済みのcookieの総数を表示し、発行済みのcookieを

[N(個目):N(名前)]

と表示するコードです。

その結果が下の動画です。
こちらの動画ではChromeで試しています。

cookieを180個発行し、181回目のリロードを行った直後に発行済みのcookieが150個に減ります。
これだけだと、

「Chromeは180個 cookieを発行できるが、181個目を発行しようとすると、古い順に30個のcookieを削除する」

という仕様なのかな?
と思いきや、削除されたcookieは古い順ではなさそうです。

動画では

[1:1][2:2] ... [13:13][14:29]

となっており、14番目〜28番目のcookie(15個)が削除されていることがわかります。
さらに、

[97:112][98:129]

となっているため、113番目〜128番目のcookie(15個)も削除されているようです。

これで合計30ですが、なぜこの2まとまりが削除されたのかはよくわかりません。

そこでもう1度同じことをやってみました。

すると先ほどとは違う結果に。

謎は深まる一方。
何か法則があるのだと思いますが解明までには至りませんでした。

ちなみに、30個削除された後は新しいcookieが追加されて180に達したところでまた30個削除されますが、上記のコードでは再現できません。

$cookie_name = count($_COOKIE) + 1;

としているので、30個削除された時点で同じ名前のcookie(150)に戻ってしまうからです。

最後に

JavaScriptを含めたプログラミング言語の年収と習得の難しさをランキングにしてみました。
合わせてご確認ください。

あわせて読みたい
  • この記事を書いた人

goke

個人開発から世界を変えるようなプロダクトづくりを目指しています

-プログラミング雑記