[5] Cookie の Expires
属性は、
設定する名前と値の組の有効期限を指定します。
[7] Expires
属性はクッキーの最大寿命を、
クッキーが期限切れとなる日時として示します。 >>25, >>6
[26] この時刻を過ぎるとその Cookie は保存・送信されなくなります。 >>6 ただし利用者エージェントはこの時刻まで必ずクッキーを保持し続けなければならないわけではありません >>25。
[8] Expires
属性が指定されない場合、
利用者のセッションが終了次第有効期限に達したとみなします。 >>6
[10] Expires
属性の値はCookieの日付形式の文字列です。
[15] Cookie を削除するには (Domain
と Path
を揃えた上で) 同じ名前の Cookie を過去の Expires
属性の値で設定することになっています。 >>6
[16] 過去の時刻でなく現在の時刻を指定することもありますが、過去にした方が安全です。
[12] 有効期限を無期限とすることはできないため、十分将来の値を設定することで事実上の無期限としていることがあります。それを有効な技法として紹介している解説サイトもあります。
無期限という指定はできないようです。2038年以降の日付をうまく扱えないシステムもあるので、2030年頃の日付を指定しておきましょう。
[13] しかし、このような実装になっていると2030年になると使えなくなることに注意が必要です。 Web サイトが予想以上に長く使われたり、コードがコピペで転用されていつまでも使いまわされるのはよくあることなので、 危険です。
[14] 本当に無期限にしたいときは、現在時刻より数年先としておく方が無難でしょう。
[42] 鯖は任意の日時を設定できますが、実際には利用者エージェントはそれに無条件に従って何十年もクッキーを保持し続けるとは限りません。 ですから、鯖は無闇に先の日時を指定するのではなく、用途に照らして妥当な期間を指定するべきです >>32。
[4] 属性値はCookieの日時形式として構文解析しなければなりません。 失敗した場合には属性を無視しなければなりません。 結果が利用者エージェントの扱える最小または最大の日時の外側を表しているなら、 最小または最大に読み替えて構いません。 >>3
[30] クッキーは満期時刻が過去となったとき、満期となります >>27。
[31] 利用者エージェントは、保存しているクッキーが満期となった時、 これを削除しなければなりません >>27。
[20] 利用者エージェントは、有効期限に達していなくても、Cookieのサイズ制限などの理由で Cookie を削除して構いません。 >>6
[11] Netscape Navigator の1.1までの版には不具合があって、 Path
属性に /
が明示的に設定されないとセッションを超えて Cookie
が保持されませんでした。 >>6
[1] cookieのexpireがブラウザにより異なる - エンジニアが作る最新ITブログ by DODA ( 版) http://www.asp-edita.jp/doda/one/doda7204_34.html
- ieの場合
- HTTPレスポンス内のexpireを忠実に使用します。従って、「Expires=Mon, 13-Feb-2006 02:52:04 GMT」とあれば、2006/2/13の11:52:04までcookieは有効です。
- firefoxの場合
- HTTPレスポンス内のexpireとdateの差を、クライアントのシステム時間に加えてcookieの有効時間を計算しています(結果から予想)。
むかしのnn4.7もfirefoxと同じだったはず。operaはieと同じだった。
[21] IETF は Netscape Cookie にかわる独自仕様の Cookie を推進していました。
RFC 2109 の Set-Cookie:
や RFC 2965 の
Set-Cookie2:
では Expires
属性ではなく、
Max-Age
属性が使われていました。また RFC 2965
では Cookie の削除専用の Discard
属性もありました。
[22] RFC 2109 10.1.2 Expires and Max-Age では、Netscape Cookie の
Expires
属性についても参考までに簡単に紹介されていました。
[17] HTTP 頭部には Expires:
頭欄を指定することができますが、
こちらは実体の有効期限を示すものなので、Set-Cookie:
欄で使う Expires
属性とは関係ありません。
[18] IETF 版の Cookie 仕様には Expires
属性に代わり
Max-Age
属性が定義されています。後にこれは一般的な利用者エージェントでも実装されるようになり、
IETF 独自の Cookie 仕様が破棄された後の RFC 6265 の Cookie
仕様にも Expires
と Max-Age
の両方が残っています。
[19] 属性の値に空白が含まれるので、本来なら値を "
で括るのが
MIME や HTTP の仕様的に美しい方法ではあるのですが、
Cookie では逆に括ってはいけません。
[44] 1160368 - Treat cookies set over non-secure HTTP as session cookies (if pref "network.cookie.thirdparty.nonsecureSessionOnly" is true) () https://bugzilla.mozilla.org/show_bug.cgi?id=1160368
[47] draft-thomson-http-omnomnom-00 - Expiring Aggressively Those HTTP Cookies (, ) https://tools.ietf.org/html/draft-thomson-http-omnomnom-00