セッションCookieはブラウザを閉じた時点で削除される。これはセッションCookieにおける基本の動作。不変の真理なのだ。しかし、今回は違った。上記のような設定を行い、Google Chromeを閉じた。これでセッションCookieは削除されたはずだ。再びGoogle Chromeを開き、ページを確認する。そこにはなんとまだセッションCookieが残っていたのだった。消えるはずのセッションCookieがなぜ残っていたのか。この記事ではこの謎を解明し、何が原因で、どのような対策を行えば良いかを述べていく。
目次
セッションCookieとは
まず、セッションCookieについて軽く解説します。CookieにはExpires属性という日時を指定し、Cookieに有効期限を設定することが出来る属性があります。日時を指定した場合は「永続的なCookie」と見なされ、指定した日時まで有効になり、その日時を超えると削除されます。また、日時を指定しなかった場合は「セッションCookie」と見なされ、ブラウザを閉じる(セッションが終了する)と削除されます。今回はセッションCookieが予想と異なった動作をしており、原因が分からずにはまってしまいました。
現象
Cookieに関する学習を行うために、とあるテスト用サイトを用意しました。このサイトではCookieのExpires属性に日時を指定していないため、Google Chromeを閉じるとセッションCookieが削除されるはずでした。
(Google Chromeでページを表示して右クリックし、[検証>[Application]>[Cookies]でCookieについて確認。ExpiresがSessionとなっており、ブラウザを閉じる(セッションが切断される)と削除されるようになっていることが分かる。)
しかし、再びGoogle Chromeを開くとまだそこにセッションCookieが消されずに存在していました。なぜこんなことが起こったのか訳が分からず、数十分間試行錯誤した結果やっと原因を見つけました。
原因:起動時>[前回開いていたページを開く]の設定
Google Chromeの[起動時]の設定を[前回開いていたページを開く]にしておくとブラウザを立ち上げたときにすぐに前回開いていたタブを復元することが出来てとても便利です。しかし、どうやらこの設定を行うとブラウザを閉じてもセッションは切断されないそうです。つまり、セッションCookieは削除されないということになります。
対策
対策方法としては2つあります。どちらもすぐに設定出来るため、どちらの方法をとっても解決することが出来ますが、それぞれ注意が必要です。
① [前回開いていたページを開く]を変更する
今回は[起動時]>[前回開いていたページを開く]という設定が問題となっていました。そのため、[新しいタブページを開く]に変更すれば良いです。こうすることでブラウザを閉じるとセッションが切断されるため、セッションCookieは削除されます。
しかし、ブラウザ起動時に前回開いていたページを開いてくれなくなるため、注意して下さい。
② [すべてのウィンドウを閉じるときにCookieとサイトデータを削除する]をオンにする
どうしても起動時に前回開いていたページを開きたい方は [プライバシーとセキュリティ―]>[Cookieと他のサイトデータ]>[すべてのウィンドウを閉じるときにCookieとサイトデータを削除する]をオンにすると、ブラウザを閉じたときにCookieを削除することが出来ます。
しかし、セッションCookie、永続的Cookieに関わらず全てのCookieが削除されてしまうため注意が必要です。
余談(Firefoxの場合)
Firefoxで起動時に前回のページを開きたい場合は設定の[一般]の中に[前回のウィンドウとタブを開く]という設定があります。実はGoogle Chromeと違い、ブラウザ終了時にセッションCookieが削除されるかどうかはこの設定に左右されません。
じゃあどこで削除するようにするのかというと、[プライバシーとセキュリティ]タブにある[Cookieとサイトデータ]の中の[Firefoxを閉じたときにCookieとサイトデータを削除する]をオンにします。この設定を行うことでブラウザを閉じたときにCookieを削除することが出来ます。
しかし、セッションCookie、永続的Cookieに関わらず全てのCookieが削除されてしまうため、注意が必要です。
おわりに
セッション管理においては、セッションIDを攻撃者に窃取されないためにもセッションが終了する(ブラウザを閉じる)とデータが消えるセッションCookieを使うべきというのが通説です。しかし、今回の件でブラウザの設定次第では、セッションCookieはブラウザを閉じても削除されない場合があるということが分かりました。この仕様によって大きな影響を受けるシステムの場合には、Expires属性を付与してCookieを短時間だけ利用可能にする、利用者に今回の設定を使わないように案内するなどの対処法が必要かもしれません。
記載されている会社名、システム名、製品名は一般に各社の登録商標または商標です。
当社製品以外のサードパーティ製品の設定内容につきましては、弊社サポート対象外となります。