[5] [[Cookie]] の [DFN[[CODE(HTTP)@en[Expires]] [RUBYB[[[属性]]]@en[attribute]]]]は、 設定する[[名前]]と[[値]]の組の[[有効期限]]を指定します。 * 仕様書 - [6] [[Netscape Cookie]]: [CITE[Client Side State - HTTP Cookies]] * 意味 [7] [CODE(HTTP)@en[[[Expires]]]] [[属性]]の値は [[Cookie]] が[RUBYB[妥当な生存時間]@en[valid life time]]を指定します。 この時刻を過ぎるとその [[Cookie]] は保存・送信されなくなります。 [SRC[>>6]] [8] [CODE(HTTP)@en[[[Expires]]]] [[属性]]が指定されない場合、 [[利用者]]の[[セッション]]が終了次第[[有効期限]]に達したとみなします。 [SRC[>>6]] ;; [9] [[セッション]]の終了のタイミングは規定されておらず、 [[Webブラウザ]]の実装に依りますが、 [[ブラウザ]]の[[窓]]を閉じた時などに[[セッション]]が終了したとみなすのが普通です。 * 構文 [10] [CODE(HTTP)@en[[[Expires]]]] [[属性]]の値は[[Cookieの日付形式]]の文字列です。 ** 過去 [15] [[Cookie]] を明示的に削除する方法が存在しないため、過去の時刻を [CODE(HTTP)@en[[[Expires]]]] [[属性]]に指定することによって削除させることがよくあります。 [16] 過去の時刻でなく現在の時刻を指定することもありますが、過去にした方が安全です。 ** 無限大 [12] 有効期限を無期限とすることはできないため、十分将来の値を設定することで事実上の無期限としていることがあります。それを有効な技法として紹介している解説サイトもあります。 [2] >無期限という指定はできないようです。2038年以降の日付をうまく扱えないシステムもあるので、2030年頃の日付を指定しておきましょう。 ;; [CITE[とほほのCookie入門]] ([TIME[2009-01-19 23:44:50 +09:00]] 版) [13] しかし、このような実装になっていると'''2030年になると使えなくなる'''ことに注意が必要です。 Web サイトが予想以上に長く使われたり、コードがコピペで転用されていつまでも使いまわされるのはよくあることなので、 危険です。 [14] 本当に無期限にしたいときは、現在時刻より数年先としておく方が無難でしょう。 * 実装 [11] [[Netscape Navigator]] の1.1までの版には不具合があって、 [CODE(HTTP)@en[[[Path]]]] [[属性]]に [CODE(URI)@en[[[/]]]] が明示的に設定されないと[[セッション]]を超えて [[Cookie]] が保持されませんでした。 [SRC[>>6]] [1] [CITE[cookieのexpireがブラウザにより異なる - エンジニアが作る最新ITブログ by DODA]] ([TIME[2009-01-28 16:44:33 +09:00]] 版) > :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と同じだった。 * 関連 [17] [[HTTP]] [[頭部]]には [CODE(HTTP)@en[[[Expires:]]]] [[頭欄]]を指定することができますが、 こちらは[[実体]]の有効期限を示すものなので、[CODE(HTTP)@en[[[Set-Cookie:]]]] 欄で使う [CODE(HTTP)@en[[[Expires]]]] [[属性]]とは関係ありません。