Набор файлов cookie для поддоменов
Я просмотрел много вопросов о файлах cookie, но не нашел ответа на свою проблему. У меня есть следующий сценарий:
Пользователь создает логин на example.com и должен получить cookie-файл, но только для субдомена fuu.example.com. Я генерирую следующую часть заголовка HTTP:
Set-Cookie: name=TestUser; Domain=fuu.example.com; Path=/; secure; HttpOnly
Но когда я отправляю запрос на https://fuu.example.com/, файл cookie не будет добавлен в запрос. Интересно, возможно ли, чтобы example.com установил cookie для fuu.example.com
, Я знаю, что возможно, что example.com установил cookie для .example.com
также для всех поддоменов для example.com, но это не то, что я хочу.
Как мне установить cookie для субдомена? Я не вижу cookie в запросе к поддомену.
3 ответа
Нет. Кроме того (см. обновление ниже) cookie будет отклонен:fuu.example.com
недопустимое значение домена (оно должно начинаться с .
т.е. .fuu.example.com
)
Чтобы предотвратить возможные нарушения безопасности или конфиденциальности, пользовательский агент отклоняет cookie-файл (не хранит его информацию), если выполнено любое из следующих действий:
- Хост-запрос представляет собой полное доменное имя (не IP-адрес) и имеет форму HD, где D - это значение атрибута домена, а H - строка, содержащая одну или несколько точек.
Запрос-хост example.com
и значение атрибута домена foo.example.com
, Но запрос-хозяин example.com
не имеет форму HD, где D будет foo.example.com
, Таким образом, cookie отклоняется.
Обновление Текущая спецификация RFC 6265, которая является устаревшей RFC 2109, которая приведена выше, игнорирует начальную точку. Но эффективный домен обрабатывается так же:
[…] Если значение атрибута Domain равно "
example.com
"пользовательский агент будет включать cookie в заголовок Cookie при отправке HTTP-запросов на example.com, www.example.com и www.corp.example.com. (Обратите внимание, что ведущий% x2E (".
"), если присутствует, игнорируется, даже если этот символ не разрешен, но завершающий% x2E (".
"), если присутствует, заставит пользовательский агент игнорировать атрибут.)[…] Пользовательский агент примет файл cookie с атрибутом домена "
example.com
"или из"foo.example.com
"от foo.example.com, но пользовательский агент не примет файл cookie с атрибутом домена"bar.example.com
"или из"baz.foo.example.com
".
2 домена example.com
а также foo.example.com
может делиться куки, только если домен явно указан в заголовке Set-Cookie. В противном случае область действия cookie ограничивается узлом запроса.
Например, если вы отправили следующий заголовок из foo.example.com
:
Set-Cookie: name=value
Тогда куки не будут отправлены на запросы example.com
, Однако, если вы используете следующее, оно будет использоваться на обоих доменах:
Set-Cookie: name=value; domain=example.com
В RFC 2109 домен без начальной точки означал, что его нельзя использовать на поддоменах, а только с начальной точкой (.example.com
) позволит использовать его во всех поддоменах.
Однако современные браузеры уважают более новую спецификацию RFC 6265 и игнорируют любую начальную точку, что означает, что вы можете использовать cookie на поддоменах, а также доменах верхнего уровня.
В итоге, если вы установите cookie, как во втором примере выше, example.com
было бы доступно foo.example.com
, и наоборот.
Для получения более подробной информации: /questions/18185708/obmen-cookie-mezhdu-poddomenom-i-domenom/18185727#18185727
На самом деле, существует простой и полностью кроссбраузерный способ обмена файлами cookie между исходным доменом и поддоменами, но вы должны поделиться им при установке времени, для комфортной работы с файлами cookie в браузере, который я использую js-cookie
а с помощью следующего файла cookie он может использоваться как исходным доменом, так и всеми его поддоменами:
Cookie.set('key', 'value', { domain: '.domain.com' })
// a . added before domain name
Подсказка : добавление этого
.
поделится файлом cookie со всем поддоменом.