[1] [[Cookie]] では [[expires]] 属性の値として日付が使われます。 [[NetscapeのCookie仕様]]では、この形式を [CODE[Wdy, DD-Mon-YYYY HH:MM:SS GMT]] と規定しています。 [[HTTPの日付形式]]に似ていますが、日の指定の要素間に [CODE(ABNF)["-"]] を入れなければいけません。 * 仕様書 - [14] [[Netscape Cookie]]: [CITE[Client Side State - HTTP Cookies]] * メモ [3] >>2 の例は Netscape の仕様書からの引用ですが、ここでは''4桁でなければならない''と規定されているはずの年号が2桁になっています。 (それに、 >>1 の構文なら曜日は短い名前のはずだと思うのですがね。) [4] 巷の [[CGI]] script などを見ていると、日付の指定が間違っているものも見受けられます。 [8] >>4,>>6-7 当然、不正な形式に対する動作は未定義です。 とはいえ、 >>2 のように仕様からしてぐちゃぐちゃなので、どうしたものでしょうか。 [9] >>8 もちろん、 >>1 の形式を使えば全ての Cookie 対応 UA で問題なく処理されるはずです。 [10] >>8 そういうのを解説してる書籍とか Web page があるらしいです。ひどいな! [11] [CITE['''['''JavaHouse-Brewers:31373''']''' Re: Cookie.setMaxAge() について]] ([TIME[2001-11-24 20:53:20 +09:00]] 版) >> 「問題」 >> ブラウザがInternet Explorer 5の場合、 = Cookie.setMaxAge()へのパラメータが正の場合、 クッキーは設定されるが、指定された秒数が経過しても、 クッキーは無効にならない。 クッキーの有効期間には、、"木, 9 14 30828 02:48:05"が設定されている。 (クッキー受信時の確認ダイアログで確認) ブラウザを再起動しても、クッキーは有効である。 # NN4.7では、指定された時間が経過するとクッキーは無効になる。 >> = Cookie.setMaxAge()へのパラメータに0を指定した場合、 クッキーが設定されたままになる。 ブラウザを再起動しても、クッキーは有効である。 クッキーの有効期間には、"木, 9 14 30828 02:48:05"が設定されている >> ;; NN4.7では、ブラウザはクッキーを受信した旨をダイアログで表示する。 しかし、その後のリクエストではこのクッキーを送信しない。(期待通り) >「原因」 >Internet Explorer 5(version 3, 4では調べていない)では、 次のようにタイムゾーンがJSTで指定されている有効期限付きSet-Cookieヘッダを 正しく解釈できません。 > [PRE(HTTP example bad code)[ Set-Cookie:NAME=VALUE; expires=Tuesday,28-Feb-2000 19:00:00 JST ]PRE] > IE5では、タイムゾーンがGMTである場合は、クッキーの有効期限が正しく設定されます。 (タイムゾーンがその他の場合の動作は、調べていません。) *例 -[5] [CODE[Fri, 24-Jan-2003 16:41:00 GMT]] -[2] [CODE[Wednesday, 09-Nov-99 23:12:40 GMT]] ;; Netscape の仕様書から -[6] [CODE[Mon, 30 Dec 2020 23:59:59 GMT]] ;; 不正: HTTP 形式 -[7] [CODE[Thursday, 31-Dec-2037 00:00:00 JST]] ;; 不正: 長い曜日名, 未定義の時間帯名 [[#comment]] *メモ [12] [CITE[教えて!北京五輪「みんなにQ&A」 クッキーの有効期限の記述について]] ([TIME[2009-02-01 21:31:33 +09:00]] 版) >IEでは、曜日は確かに 無視されているようでした(曜日をいろいろ変えても 設定日時には、クッキーが削除されました)。 [13] [CITE['''['''JavaScript + Cookie''']'''実は有効期限指定がすごく簡単だった件について / 文系大学的IT系の悲哀]] ([[LiosK]] 著, [TIME[2009-02-01 21:50:13 +09:00]] 版) >手元にあるIE6, Firefox2, Opera9で確認済み。Date#toUTCStringで有効期限が指定できるなら楽だ。