Max-Age

Set-Cookie: ヘッダー Max-Age 属性 (HTTP)

[4] Set-Cookie: 頭欄Set-Cookie2: 頭欄Max-Age 属性は、 発行する Cookie寿命を指定します >>7, >>8

仕様書

意味

[19] Max-Age 属性クッキーの最大寿命 (lifetime) を、 クッキーの期限切れまでの秒数として表します。 >>18

[20] 利用者エージェントはこの秒数が経過するとクッキーを破棄し、 に送信しなくなります。ただし利用者エージェントは必ずしもこの秒数が経過するまでクッキーを保存しなければならないわけではありません >>18

[23] Max-Age 属性Expires 属性も指定されていなければ、 クッキーは現在のセッションが終了するまで保持されます。

構文

[9] 値は delta-seconds で、寿命数を正整数で表します >>7, >>8

[28] Cookie をただちに破棄するべきことを表します >>7, >>8 が、不適合とされています >>29
[17] RFC 6265 における Max-Age 属性の構文
 max-age-av        = "Max-Age=" non-zero-digit *DIGIT
                       ; In practice, both expires-av and max-age-av
                       ; are limited to dates representable by the
                       ; user agent.
 non-zero-digit    = %x31-39
                       ; digits 1 through 9

構文解析

[26] 属性値が1文字以上のASCII数字の列かその前に - がついた文字列でなければ、属性を無視しなければなりません。 そうでない場合には属性値整数と解釈し、0 以下なら表現できる最小の日時正数ならそれを数として現在日時に加えた値と解釈しなければなりません>>25

Max-Age に指定するのは数ですが、 構文解析の結果は Expires 属性と同じく日時となります。

処理モデル

[27] Expires

歴史

実装

[12] Netscape Cookie には含まれていなかった Max-Age 属性ですが、 一部の利用者エージェントや鯖側ライブラリーは RFC 2109 に従い実装しているようです。

Version がなくても使えるのかどうか? Expires との相互作用は?

[21] Max-Age 属性RFC 6265 により公式にも Netscape 由来の Set-Cookie 仕様の一部となりましたが、 それでも過去の利用者エージェントの中には Max-Age 属性に対応していないものがあります。 Max-Age 属性に対応していない利用者エージェントはこれを無視します >>18

関連

[11] Netscape Cookie では Expires 属性がありましたが、 IETF 独自の Cookie では代わりに Max-Age 属性が提供されています。

[22] RFC 6265 の新しい Cookie 仕様ではこの両方が定義されています。 両方が指定されている場合は Max-Age 属性が優先されます >>18

メモ

[1] [ruby-list:35933] Re: Tofu の有効期限について ( 版) http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/35933

ruby-1.6.7のCGI::Cookieではmax-ageは扱ってないようですが、 扱う予定はあるでしょうか?

最新の CGI.pm も開発版の CGI.pm もまだ対応する様子が無いのですが、 まあ、RFC にある事ですから、扱えるようにしたいと思います。しかし、 ちょっと検索してみると、

http://www.m-fr.net/etc/cookie.html

少なくとも、WindowsでIEの5.5、NNの4.76、6.02、Operaと試しまくってみ たのですが、概ねペケです。

このあたりまで対応していないとなると、あまり実用にはならないかもしれま せんね。

[2] 2008年3月 - Blog - EOF (Taku Watabe 著, 版) http://end-of-file.net/blog/2008-03.html#date-2008-03-18

IE は6と7、Safari は Mac 版 2.0.4 と 3.0.4 で確認。Firefox 2.0.0.12、Opera 9.26 は利用可能。

[3] KDDI au: そのほかの技術情報 > Cookie ( 版) http://www.au.kddi.com/ezfactory/tec/spec/cookie.html

デフォルトの有効期限
「max age」の有効期限の指定がないない場合、そのCookieの有効期限はデフォルトで「1日 (24時間) 」となります。
有効期限の指定方法
Cookieの有効期限はHTTPレスポンスヘッダの「Set-Cookie」フィールドの「max age (有効残存秒数) 」で指定することができます。
逆に Expires が使えるという記述はない。

[24] Cookieのexpireの扱いがブラウザによってちょっと異なる件 - mikanmarusanのブログ ( ( 版)) http://mikanmarusan.hatenablog.com/entry/20110131/1296489272

[30] WebDriver Add Cookie では expiry を指定できます。 ChromeDriver では指定が反映されますが、 GeckoDriver は指定時点で過去の値を指定して削除することができるものの、 将来の値を指定してもその時刻を過ぎても削除されません。

[31] Limit timeout and cookie expiry time values to the maximum safe integer (carlosgcampos著, ) https://github.com/w3c/webdriver/commit/960f5e239b5d06095a3b51fa1213a99180c1544f

[32] Integer values in timeouts and cookie expiry time · Issue #1202 · w3c/webdriver () https://github.com/w3c/webdriver/issues/1202

[33] Limit timeout and cookie expiry time values to the maximum safe integer by carlosgcampos · Pull Request #1210 · w3c/webdriver () https://github.com/w3c/webdriver/pull/1210

[34] Standardize maximum Expires/Max-Age by arichiv · Pull Request #1732 · httpwg/http-extensions · GitHub, https://github.com/httpwg/http-extensions/pull/1732