이 답변을 작성할 때이 질문에 대한 수락 된 대답 은 브라우저가 Expires
값이 과거 인 대체 쿠키를받을 때 쿠키를 삭제할 필요가 없음을 나타 냅니다. 그 주장은 거짓이다. Expires
과거로 설정 하는 것은 쿠키를 삭제하는 표준의 사양을 준수하는 방법이며,이를 위해서는 사용자 에이전트가 사양에 필요합니다.
Expires
과거에 속성을 사용하여 쿠키를 삭제하는 것은 정확하며 사양에 의해 지시 된 쿠키를 제거하는 방법입니다. RFC 6255 의 예제 섹션은 다음과 같습니다.
마지막으로 쿠키를 제거하기 위해 서버는 과거에 만료 날짜가있는 Set-Cookie 헤더를 반환합니다. Set-Cookie 헤더의 Path 및 Domain 속성이 쿠키를 만들 때 사용 된 값과 일치하는 경우에만 서버가 쿠키를 성공적으로 제거합니다.
사용자 에이전트 요구 사항 섹션 함께 사용자 에이전트가 그 유효 기간이 과거에 같은 이름으로 새 쿠키를받는 경우 쿠키 즉시 영구 삭제해야 효과가 다음과 같은 요구 사항을 포함
[새 쿠키를받을 때] 쿠키 저장소에 새로 만든 쿠키와 이름, 도메인 및 경로가 같은 쿠키가 포함 된 경우 :
- ...
- ...
- 이전 쿠키의 작성 시간과 일치하도록 새로 작성된 쿠키의 작성 시간을 업데이트하십시오.
- 쿠키 저장소에서 기존 쿠키를 제거하십시오.
새로 작성된 쿠키를 쿠키 저장소에 삽입하십시오.
쿠키의 유효 기간이 지난 쿠키는 "만료"됩니다.
쿠키 에이전트에 쿠키가 만료 된 경우 언제든지 사용자 에이전트는 쿠키 쿠키에서 만료 된 쿠키를 모두 제거해야합니다.
위의 11-3, 11-4 및 12 지점은 이름, 도메인 및 경로가 동일한 새 쿠키가 수신 될 때 기존 쿠키를 정리하고 새 쿠키로 교체해야 함을 의미합니다. 마지막으로 만료 된 쿠키에 대한 아래 사항은 해당 쿠키가 완료된 후 새 쿠키 도 즉시 제거 해야 함을 나타냅니다 . 이 사양은이 시점에서 브라우저에 흔들리지 않는 공간을 제공합니다. 브라우저가 사용자에게 쿠키 만료를 비활성화하는 옵션을 제공하면 허용되는 답변에서 일부 브라우저가 제안하는 것처럼 사양을 위반하는 것입니다. (이러한 기능은 거의 사용되지 않으며 내가 아는 한 브라우저에 존재하지 않습니다.)
그렇다면이 질문의 OP가 왜이 접근법이 실패 했는가? Internet Explorer의 복사본을 제거하여 동작을 확인하지는 않았지만 OP의 Expires
값이 잘못 되었기 때문일 것입니다 . 그들은이 값을 사용했다 :
expires=Thu, Jan 01 1970 00:00:00 UTC;
그러나 이것은 두 가지 방식으로 구문 상 유효하지 않습니다.
사양 의 구문 섹션 은 Expires
속성 의 값이
rfc1123 -date, [RFC2616], 섹션 3.3.1에 정의 됨
위의 두 번째 링크를 따라 다음과 같은 형식의 예를 찾을 수 있습니다.
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는"( "세계시"를 의미 ) 가능한 값으로 만 수행 되지 목록이 유효하지 않습니다 같은 UTC (협정 세계시). 내가 아는 한,이 날짜 형식에서 "UTC"를 사용하는 것은 결코 유효 하지 않습니다. 형식이 처음 1982 년에 지정하고, HTTP 스펙은 엄격하게 채택 할 때 유효한 값 아니었다 더 "GMT"를 제외한 모든 "영역"값의 사용을 금지하여 형식의 제한 버전.
여기서 질문자 asker 대신 thisExpires
와 같은 속성을 사용한 경우 :
expires=Thu, 01 Jan 1970 00:00:00 GMT;
아마도 그것은 효과가 있었을 것입니다.