SitePoint에 대한 기사를 참조하는 대답은 완전히 완전하지 않습니다. RFC 6265를 참조하십시오 (공정하게 말하면 이 RFC는이 질문이 게시 된 후 2011 년에 릴리스되었으며, 이는 2000의 이전 RFC 2965 및 1997의 RFC 2109 를 대체합니다 ).
섹션 5.4 , 하위 섹션 2는 다음과 같이 말합니다.
사용자 에이전트는 다음 순서로 쿠키 목록을 정렬해야합니다.
- 경로가 더 긴 쿠키는 경로가 더 짧은 쿠키보다 먼저 나열됩니다.
참고 : 모든 사용자 에이전트가 쿠키 목록을이 순서로 정렬하는 것은 아니지만이 순서는이 문서가 작성되었을 때의 일반적인 관행을 반영하며 역사적으로이 순서에 (잘못) 의존 한 서버가있었습니다.
섹션 4.2.2에도이 작은 보석이 있습니다 .
... 서버는 직렬화 순서에 의존해서는 안됩니다. 특히, 쿠키 헤더에 동일한 이름을 가진 두 개의 쿠키가 포함되어있는 경우 (예 : 다른 경로 또는 도메인 속성으로 설정된) 서버는 이러한 쿠키가 헤더에 나타나는 순서에 의존해서는 안됩니다.
예제 요청 쿠키 ( Cookie : a = 2; a = 1 )의 경로와 쿠키 집합주의 / 예 ( A = 2 )의 경로와 하나보다 긴 경로가 / ( A = 1 )과 너무 사양의 권장 사항과 일치하는 첫 번째 줄에 다시 전송됩니다. 따라서 첫 번째 값을 선택할 수 있다는 가정이 어느 정도 정확 합니다.
불행히도 RFC에서 사용되는 언어는 매우 구체적입니다. 단어의 사용은 SHOULD 및 SHOULD이 NOT RFC에 모호성을 소개합니다. 이러한 규칙 표시 해야 따라야하지만,하지 않는 요구 사양에 준수 수 있습니다. 이에 대한 RFC를 꽤 잘 이해하고 있지만 실제 고객이 무엇을하는지 알아보기위한 조사를 수행하지는 않았습니다. HTTP 클라이언트 역할을하는 하나 이상의 브라우저 또는 기타 소프트웨어 가 Cookie : 헤더 에서 가장 긴 경로 쿠키 (예 : / example )를 먼저 보내지 않을 수 있습니다 .
쿠키 값을 제어 할 수있는 위치에 있고 솔루션을 완벽하게 만들고 싶다면 다음 중 하나를 선택하는 것이 가장 좋습니다.
다른 쿠키 이름을 사용하여 다음과 같은 특정 경로에서 재정의합니다.
- 쿠키 설정 : a-global = 1; Path = /; Version = 1
- 쿠키 설정 : a-example = 2; Path = / example; Version = 1
쿠키 값 자체에 필요한 경로 저장 :
- 쿠키 설정 : a = 1 & path = /; Path = /; Version = 1
- 쿠키 설정 : a = 2 & path = / example; Path = / example; Version = 1
이 두 가지 해결 방법 모두 사용 가능한 쿠키 목록과 요청 된 URL을 비교하여 원하는 쿠키 값을 선택하기 위해 서버에 추가 논리가 필요합니다. 너무 예쁘지 않습니다. 안타깝게도 RFC는 더 긴 경로가 더 짧은 경로의 쿠키를 완전히 재정의하도록 요구할 수있는 예지력을 가지고 있지 않았습니다 (예 : 귀하의 예에서는 Cookie : a = 2 only ).