私がこの回答を書いている時点で、この質問に対する受け入れられた回答Expires
は、値が過去の置換Cookieを受け取ったときにブラウザがCookieを削除する必要がないことを述べているようです。その主張は誤りです。Expires
過去の設定は、Cookieを削除する標準の仕様に準拠した方法であり、ユーザーエージェントはそれを尊重するために仕様で必要です。
使用しExpires
たクッキーを削除するには、過去に属性は正しく、仕様によって決まるクッキーを削除する方法です。RFC 6255の例のセクションでは、次のように述べています。
最後に、Cookieを削除するために、サーバーは過去の有効期限のあるSet-Cookieヘッダーを返します。サーバーは、Set-Cookieヘッダーのパスとドメイン属性がCookieの作成時に使用された値と一致する場合にのみ、Cookieの削除に成功します。
ユーザーエージェントの要件のセクションでは、一緒に、ユーザーエージェントは、その有効期限、過去にある同じ名前を持つ新しいクッキーを受信した場合、クッキーはすぐに消去されなければならないという効果があり、次の要件を備えて
[新しいCookieを受け取ったとき] Cookieストアに、新しく作成されたCookieと同じ名前、ドメイン、パスのCookieが含まれている場合:
- ...
- ...
- 新しく作成されたCookieの作成時刻を更新して、古いCookieの作成時刻と一致させます。
- cookieストアから古いcookieを削除します。
新しく作成したCookieをCookieストアに挿入します。
Cookieの有効期限が過去の場合、Cookieは「期限切れ」になります。
いつでも、期限切れのCookieがCookieストアに存在する場合、ユーザーエージェントは、期限切れのすべてのCookieをCookieストアから削除する必要があります。
上記のポイント11-3、11-4、および12は、同じ名前、ドメイン、およびパスで新しいCookieを受信したときに、古いCookieを消去して新しいCookieで置き換える必要があることを意味します。最後に、有効期限が切れたCookieに関する以下の点は、それが行われた後、新しい Cookie もすぐに削除する必要があることを示しています。この点に関して、この仕様ではブラウザーに余計な余地はありません。ブラウザがCookieの有効期限を無効にするオプションをユーザーに提供する場合、受け入れられた回答が一部のブラウザがそうであるように示唆するように、それは仕様に違反しています。(このような機能もほとんど役に立ちません。私が知る限り、それはどのブラウザーにも存在しません。)
では、なぜこの質問のOPは、このアプローチの失敗を観察したのでしょうか。私はその動作を確認するためにInternet Explorerのコピーを振り払っていませんが、それはOPのExpires
値が不正であったためだと思います!彼らはこの値を使用しました:
expires=Thu, Jan 01 1970 00:00:00 UTC;
ただし、これは2つの点で構文的に無効です。
仕様の構文セクションでは、Expires
属性の値は
rfc1123 -date、[RFC2616]、セクション3.3.1で定義
上記の2番目のリンクをたどると、これはフォーマットの例として与えられていることがわかります。
Sun, 06 Nov 1994 08:49:37 GMT
そして、構文の定義を見つけます...
日付が書き込まれている必要があり日月年の形式ではなく、月日年の質問アスカーで使用される形式。
具体的にはrfc1123-date
、次のように定義します。
rfc1123-date = wkday "," SP date1 SP time SP "GMT"
date1
このように定義します:
date1 = 2DIGIT SP month SP 4DIGIT
; day month year (e.g., 02 Jun 1982)
そして
UTC
タイムゾーンとしては許可されません。
仕様には、この形式で許容されるタイムゾーンオフセットに関する次のステートメントが含まれています。
すべてのHTTP日付/タイムスタンプは、例外なくグリニッジ標準時(GMT)で表す必要があります。
さらに、この日時形式の元の仕様をさらに掘り下げると、https://tools.ietf.org/html/rfc822の最初の仕様で、構文セクションに "UT"( "universal time"を意味する)がリストされていることがわかります)可能な値として、しかしUTC(協定世界時)を有効としてリストしていません。私の知る限り、この日付形式で「UTC」を使用することは有効ではありませんでした。1982年にフォーマットが最初に指定されたときは有効な値ではありませんでした。HTTP仕様では、「GMT」以外のすべての「ゾーン」値の使用を禁止することにより、フォーマットの厳密な制限バージョンを採用しています。
ここで質問者Expires
がこのような属性を代わりに使用した場合、次のようになります。
expires=Thu, 01 Jan 1970 00:00:00 GMT;
それからそれはおそらく働いたでしょう。