Скажем, например, у меня было приложение, отправляющее следующие заголовки HTTP для установки в файл cookie с именем «a»:
Set-Cookie: a=1;Path=/;Version=1
Set-Cookie: a=2;Path=/example;Version=1
Если я обращаюсь к /example
серверу, оба пути действительны, поэтому у меня есть два файла cookie с именем «a»! Поскольку браузер не отправляет никакой информации о пути, два файла cookie не могут быть различимы.
Cookie: a=2; a=1
Как поступить с этим делом? Выбрать первый? Создать список со всеми значениями файлов cookie? Или такой случай следует рассматривать как ошибку разработчика?
Ответы:
Из этой статьи на SitePoint :
Изменить: эта информация с 2010 года кажется устаревшей, похоже, браузеры теперь могут отправлять несколько файлов cookie взамен, подробности см. В ответе @Nate ниже.
источник
.a.com
и хостаa.com
Ответ на статью о SitePoint не совсем полный. См. RFC 6265 (честно говоря, этот RFC был выпущен в 2011 году после публикации этого вопроса, который заменяет предыдущие RFC 2965 от 2000 года и RFC 2109 от 1997 года).
В подразделе 2 раздела 5.4 говорится следующее:
В разделе 4.2.2 также есть эта маленькая жемчужина :
В вашем примере файла cookie запроса ( Cookie: a = 2; a = 1 ) обратите внимание, что файл cookie, установленный с путем / примером ( a = 2 ), имеет более длинный путь, чем тот, который имеет путь / ( a = 1 ), и поэтому он отправляется вам первым в очереди, что соответствует рекомендациям спецификации. Таким образом , вы более или менее правильно в вашем предположении , что вы могли бы выбрать первое значение.
К сожалению, язык, используемый в RFC, чрезвычайно специфичен - использование слов ДОЛЖНО и НЕ ДОЛЖНО вносить двусмысленность в RFC. Они указывают на соглашения, которые следует соблюдать, но не обязательно, чтобы соответствовать спецификации. Хотя я достаточно хорошо понимаю RFC для этого, я не проводил исследования, чтобы увидеть, что делают реальные клиенты; возможно, один или несколько браузеров или другое программное обеспечение, выступающее в качестве HTTP-клиентов, не могут сначала отправить cookie с самым длинным путем (например: / example ) в заголовке Cookie : .
Если у вас есть возможность контролировать значение файла cookie и вы хотите сделать свое решение надежным, вам лучше всего выбрать один из следующих вариантов:
использование другого имени файла cookie для переопределения в определенных путях, например:
сохранение нужного пути в самом значении cookie:
Оба этих обходных пути требуют дополнительной логики на сервере для выбора желаемого значения cookie путем сравнения запрошенного URL-адреса со списком доступных файлов cookie. Это не слишком красиво. Это прискорбно RFC , не предусмотрительно требовать , что более длинный путь полностью перекрывает печенье с более коротким путем (например , в вашем примере, вы получите Cookie: а = 2 только ).
источник
path=/;Path=/
спецификация FRC-6265? Я не нашел такого упоминания. Угроза Tomcat любая ";" в пути как неправильный символa=2&path=/example;Path=/example
так, что нет;
пути.Нет ничего плохого в том, чтобы иметь несколько значений для одного и того же имени ... если они вам нужны. Вы даже можете встроить в значение дополнительный контекст.
Если вы этого не сделаете, то, конечно, можно будет использовать разные имена, если вам нужны оба контекста.
Альтернативой является отправка того же имени файла cookie с тем же путем (и доменом) даже с более конкретных путей. Эти инструкции по установке файлов cookie перезапишут значение этого файла cookie.
Теперь, когда вы знаете самую важную часть (как они работают) и что вы можете выполнить то, что вам нужно, несколькими способами, мой ответ на ваш вопрос: это проблема разработчика.
источник
Я, конечно, знаю о приложениях, которые широко используют несколько идентификаторов сеансов и, похоже, работают стабильно. Однако я не знаю - и не собираюсь выяснять - делают ли они это, потому что браузер возвращает файлы cookie в согласованном порядке в зависимости от того, когда они были установлены / для какого пути они были установлены, или пытается ли приложение сопоставить каждый один к существующему сеансу.
Я настоятельно рекомендую избегать этой практики.
Однако, если вы действительно хотите знать, как браузеры (и приложения) справляются с этим сценарием, почему бы не создать тестовую установку и не попробовать ее.
источник
Если вы используете платформу Java / Scala Play: будьте осторожны! Если запрос содержит несколько файлов cookie с одним и тем же именем, Play предоставит вашему коду только 1 из них.
источник
Если вам нужно различать их, вы должны дать им разные ключевые значения.
источник