Несколько заголовков Set-cookie в HTTP - PullRequest
27 голосов
/ 27 сентября 2010

Я пишу небольшой класс, который действует как очень простой HTTP-клиент.Как часть проекта, над которым я работаю, я делаю это с помощью cookie.Однако мне неясно, что происходит, когда мой клиент получает несколько заголовков «Set-Cookie» с одним и тем же ключом, но устанавливаются разные значения.

Например,

Set-Cookie: PHPSESSID=abc; path=/
Set-Cookie: PHPSESSID=def; path=/
Set-Cookie: PHPSESSID=ghi; path=/

Какой изэто должно быть значение для PHPSESSID?Обычно это происходит, когда вы вызываете session_start (), а затем session_regenerate_id () на той же странице.Каждый установит свой собственный заголовок.Все браузеры, похоже, справляются с этим, но я не могу заставить своего клиента выбрать правильный.

Есть идеи?!

Ответы [ 3 ]

26 голосов
/ 20 октября 2011

RFC 6265 раздел 4.1.2 состояния:

Если пользовательский агент получает новый файл cookie с тем же именем cookie,
значение домена и значение пути в виде файла cookie, который он уже сохранил,
существующий файл cookie удаляется и заменяется новым файлом cookie.
Обратите внимание, что серверы могут удалять куки, отправив пользовательскому агенту
новый файл cookie с атрибутом Expires со значением в прошлом.

Поэтому я обработал бы заголовки в указанном порядке и переписал бы их, если есть дубликат. Так что в вашем случае у вас будет только один PHPSESSID = ghi.

18 голосов
/ 25 июля 2014

RFC 6265 состояния:

Серверы НЕ ДОЛЖНЫ включать более одного поля заголовка Set-Cookie в один и тот же ответ с тем же именем cookie.

Поэтому я был бы очень обеспокоен, если бы ваш сервис отправлял несколько заголовков Set-Cookie с одним и тем же ключом.Тем более, что я видел, что пользовательские агенты и прокси-серверы ведут себя неожиданно - иногда принимают значение первого заголовка, иногда переставляют заголовки.

Как клиент, типичное поведение пользовательского агента, кажется, принимает значение последнегозаголовок.RFC ссылается на такое поведение с помощью следующего оператора:

Если пользовательский агент получает новый файл cookie с тем же именем cookie, значением домена и значением пути в качестве файла cookie, который он уже сохранил, существующий файл cookie удаляется и заменяется новым файлом cookie.

2 голосов
/ 27 сентября 2010

Ответ должен быть в draft-ietf-httpstate-cookie .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...