同ドメインで同名のcookieが2つ登録されてしまい、原因を調査しました。
cookieの判定条件
cookieは以下の3つのパラメータで差別化されています。
- 名前 (cookieのキー名)
- ドメイン (cookieを使用するドメイン)
- パス (cookieが使用できるパス)
今回、名前とドメインは同じでしたが、パスが違ったため別のcookieと判断されて重複登録されていました。
重複登録されないようパスを指定
複数個所で同一のcookieを作成・更新する処理がある場合、重複登録されないようにパスを指定する必要があります。
今回はPHPとjavascriptでパス指定の方法を紹介します。
※例では「/」以下でcookieが使用できるようパスを設定。
【PHPの場合】
phpファイル
setcookie('name', 'value', [
'path' => '/',
]);
※なお、setcookieのオプションに「'httponly => true'」が設定されていると、javascriptなどhttp通信以外の方法でcookieの値をいじれなくなるので注意。
【javascriptの場合】
jsファイル
document.cookie = 'name=' + encodeURIComponent('value') + ';path=/';