発火後忘失

FIRE AND FORGET

Google Chromeで想定通りCookieが消えてくれなかった

このエントリを記載した際に使用していたブラウザのバージョンは以下の通り。

ブラウザ ブラウザバージョン OS
Chromium 45.0.2454.101 Ubuntu 15.10 (64-bit) Ubuntu15.10
Firefox 42.0 Ubuntu15.10
Google Chrome (未確認 あとで追記) Windows10

背景

はてなブログへログインするためのcookie受け入れ設定をしようと、オムニバー(URLバー)のクッキーマークをポチポチとやってこんな設定にしました。

ホスト名のパターン 動作
www.hatena.ne.jp 終了時に消去
blog.hatena.ne.jp 終了時に消去
yukihane.hatenablog.com 終了時に消去

この設定でログインとblogエントリの編集が行えるようになりましたので安心していたのですが、ブラウザを一旦終了して起動しなおしてもログイン状態が継続していることに気づきました。

はてな関係のcookieは終了時に全て削除される(のでログアウト状態にもどる)想定だったので、なにがおかしいのだろう?と起動直後のcookieを見てみました。

すると、設定で指定した www.hatena.ne.jp 等(以降、subdomain cookieと呼称)は確かに消えているのですが、 hatena.ne.jphatenablog.com といったサブドメインを削ったcookie(以降、rootdomain cookieと呼称)が残ったままになっていました。

ここで、何が想定と異なっていたのかをまとめると、

  • rootdomain cookieは一時的にも受け入れるつもりではなかった
  • 終了時に、受け入れた全てのcookieは削除されている想定だったが消えていなかった

の2点になります。

問題

rootdomain cookieが受け入れられている

同様の設定をFirefoxでも行ってみたところ、こちらでもrootdomain cookieは受け入れられていました。
どうやらこの挙動はどうやら標準的なもののようです。

ググってみたところ、以下のようなページが見つかりました。

RFC2965(とその後継RFC6265)で、
> x.y.z.com can set a cookie domain to itself or parents - x.y.z.com, y.z.com, z.com
となるようなことが書かれているようで、今回のブラウザ受け入れ設定もこれに準じているのかな、と。
準じているのが良いのか悪いのかで言うと、悪い気がしますが、私のようにホワイトリスト的に使わないのであれば問題ないのかもしれません。

終了時に受け入れたcookieが削除されない

これはChromeFirefoxで挙動が異なり、Firefoxではrootdomain cookieも削除されていました。つまり、次回起動時には想定通りログアウト状態になっています。

ここでふと気になったのですが、 xxx.example.com は終了時削除、 yyy.example.com はずっと保持する、という設定にしていた場合、 example.com はどうなっている/どうなっているべきなんでしょうね。 xxx 由来のものか yyy 由来のものか区別がつくもんなんでしょうか…?

そんなわけで、一概にChromeのバグだ、ということも出来ないのかも。

結論

rootdomainまで辿って設定が有効になる、かつ消去したいのであれば明示的に記述しなければならないのであれば、結局は次のような設定にする必要があるということになります。

ホスト名のパターン 動作
blog.hatena.ne.jp 終了時に消去
www.hatena.ne.jp 終了時に消去
hatena.ne.jp 終了時に消去
yukihane.hatenablog.com 終了時に消去
hatenablog.com 終了時に消去

他のサイトでも同じようなことなんてやってられないしどうしよう、と思案したところ、もっと良い方法があることに気づきました。
次回に続く。