質問: OWASP Session Management Cheat Sheet の Cookies > Expire and Max-Age Attributes セクション(JPCERT日本語訳)では、`Expires` 及び `Max-Age` が設定されていないクッキー(non-persistent cookies)はブラウザインスタンスが終了すれば強制的に消されるので、セッション管理にはこのnon-persistent cookiesを用いることを **強く推奨する(highly recommended)** 、とあります。 一方で、この文章中に登場する「ブラウザインスタンスの終了」がどのタイミングを指すのか自明では無いのでは、という懸念があります。 例えば次のリンクにあるような挙動は(少なくとも私の)予想に反します。 (いずれも少し古い記述のようなので、現在もこの通りなのかはわかりませんが。) * Chrome doesn't delete session cookies - Stack Overflow * スマホブラウザでのセッションクッキーの有効期限 - HTML5/CSS3, JavaScript 次世代WEB研究開発 今回、有効期限を長くとも1時間程度のセッションを管理しようと考えています。 上記のような挙動を考えると、persistent cookiesを用いても問題ないのでは(むしろnon-persistent cookiesよりは確実に管理(削除)できるのでは)、と考えたのですが、何か理解を誤っている/問題を見落としているでしょうか。
回答: この問題はなかなか難しいですが、それでも私はセッション管理用Cookieの有効期限の設定は慎重であるべきだと思います。 なぜなら、逆に意図せずセッションが残ってしまい、使い回しが発生する可能性があるからです。 例えば共有PCなども一律で一時間残す設定にしてしまうと、セッションが残ってしまう問題が起きてしまいます。 ブラウザのセッションが維持されてしまう問題は情報管理部門では既知の問題として対策されている可能性が高く、大抵はセッションを維持してブラウザを起動しないように対策されていることもあると思います。 その場合は逆に有効期限があるとブラウザインスタンスを消したのにCookieのせいでセッションが残ってしまうという問題が発生してしまうでしょう。 慎重であるべきと答えた理由としては、例えばこのサイトは 「Cookieを1時間の有効期限で利用しています」とか「共有パソコンの方は有効期限を設定しない」的な、クライアント側で何らかの対応ができればより良いと思います。もちろん共有PCが使えないようなシステムだったりといった、環境や状況にもよるでしょう。 また、セッションはあくまで、ブラウザとサーバの情報の整合で使っているのでサーバ側のセッションの保持期間を短くしてしまうのも手です。 例えブラウザでセッションが残っていたとしてもサーバ側では一定期間で削除してしまうようにすれば、セッションの維持は難しくなるでしょう。もちろん利便性の問題もあるので、よく要件を確認する必要はあるとは思います。