Печенье домена для субдомена
Я просмотрел много вопросов о файлах 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 в запросе на субдомен.
Ответы
Ответ 1
Нет. Кроме того, fuu.example.com
является недопустимым значением домена (он должен начинаться с .
, т.е. .fuu.example.com
) (см. обновление ниже), cookie будет отклониться:
Чтобы предотвратить возможные нарушения безопасности или конфиденциальности, агент пользователя отвергает куки файл (не сохраняет его информацию), если выполнено одно из следующих условий:
- Хост-запрос - это полное имя домена (не IP-адрес) и имеет форму HD, где D - значение атрибута Domain, а H - строка, содержащая одну или несколько точек.
Хост-запрос example.com
, а значение атрибута домена foo.example.com
. Но request-host 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 ( ".
" ), если он присутствует, игнорируется, хотя этот символ не разрешен, но trailing% x2E ( ".
" ), если присутствует, приведет к тому, что пользовательский агент игнорирует атрибут.)
[...] пользовательский агент примет cookie с Атрибут домена "example.com
" или "foo.example.com
" из foo.example.com, но пользовательский агент не примет cookie с Атрибут домена "bar.example.com
" или "baz.foo.example.com
".
Ответ 2
2 домена example.com
и foo.example.com
могут передавать только файлы cookie, если домен явно указан в заголовке Set-Cookie. В противном случае область действия файла cookie ограничивается узлом запроса.
Например, если вы отправили следующий заголовок из foo.example.com
:
Set-Cookie: name=value
Затем cookie не будет отправляться для запросов example.com
. Однако, если вы используете следующее, оно будет использоваться в обоих доменах:
Set-Cookie: name=value; domain=example.com
В RFC 2109 домен без ведущей точки означал, что он не может использоваться на поддоменах, и только ведущая точка (.example.com
) позволит использовать ее в субдоменах.
Однако современные браузеры уважают новую спецификацию RFC 6265 и игнорируют любую ведущую точку, что означает, что вы можете использовать cookie на субдоменах, а также на домен верхнего уровня.
В заключение, если вы установите cookie как второй пример выше из example.com
, он будет доступен с помощью foo.example.com
и наоборот.
Подробнее: fooobar.com/info/30865/...