ひでぼ~blog

C#ときどきゲーム

HTTPクッキーの有効期限について調べた

ブラウザを閉じたときに消えるクッキーとそうじゃないクッキーの違いがよく分かっていなかったので調べました。

ブラウザを閉じたときに消えるクッキー

セッションクッキーと呼ばれます。 クッキーはHTTPレスポンスヘッダーのSet-Cookieでサーバーからクライアントへ送信され、 Expires、Max-Ageで有効期限をセットすることができます。 セッションクッキーはこれらの有効期限の指定がないクッキーです。 セッションクッキーはストレージに保存されず、メモリに保存されるためブラウザなどのクライアントを終了すると消えてしまいます。Webサイトでログイン中にブラウザを閉じるとログイン状態が解除されることがあるのは、セッションクッキーでログイン状態を管理しているためですね。 MDNにはこのような説明がありました。

セッション Cookie は現在のセッションが終了すると削除されます。
ブラウザーはいつ「現在のセッション」が終わったと見なすかを定義し、ブラウザーによっては再起動時にセッションの復元を使用するため、セッションクッキーが無期限に持続することがあります。

ブラウザーの終了(×ボタンで閉じるなど)がセッションの終了と定義されているということですかね。

developer.mozilla.org

ブラウザを閉じても消えないクッキー

こちらは永続的クッキー(Persistent Cookie)と呼ばれるそうです。Set-CookieでExpires、Max-Ageが指定されているクッキーです。有効期限がセットされたクッキーは有効期限が過ぎると削除されます。ストレージに保存されるためブラウザを閉じても消えません。Twitterやメルカリなど一度ログインしたらしばらくの期間はブラウザを閉じてもログイン状態が保持されるのは永続的クッキーがあるからですね。

DevToolsでクッキーを見てみる

ChromeのDevToolsでクッキーを見てみました。Expiresの列を見てみるとセッションクッキーの場合はSessionと表示されています。 f:id:hideb3:20200817173312p:plain

参考

developer.mozilla.org