У меня два вопроса. Я понимаю, что если я указываю домен как .mydomain.com
(с ведущей точкой) в куки, то все субдомены могут совместно использовать куки.
Может ли subdomain.mydomain.com
получить доступ к cookie, созданному в mydomain.com
(без www
субдомена)?
Может ли mydomain.com
(без www
субдомена) получить доступ к cookie, если он создан в subdomain.mydomain.com
?
Ответы:
2 домена
mydomain.com
иsubdomain.mydomain.com
могут совместно использовать куки, если домен явно указан вSet-Cookie
заголовке. В противном случае область действия cookie ограничивается узлом запроса. (Это называется «cookie только для хоста». См. Что такое cookie только для хоста? )Например, если вы отправили следующий заголовок из
subdomain.mydomain.com
, тогда cookie не будет отправляться для запросовmydomain.com
:Однако, если вы используете следующее, оно будет доступно на обоих доменах:
Этот файл cookie будет отправлен для любого субдомена mydomain.com, включая вложенные субдомены, например
subsub.subdomain.mydomain.com
.В RFC 2109 домен без ведущей точки означал, что его нельзя использовать на поддоменах, и только начальная точка (
.mydomain.com
) позволяла бы его использовать в нескольких поддоменах (но не в домене верхнего уровня, так что вы спросили: невозможно в старшей спецификации).Однако все современные браузеры уважают более новую спецификацию RFC 6265 и будут игнорировать любую начальную точку, что означает, что вы можете использовать cookie на поддоменах, а также доменах верхнего уровня.
Таким образом, если вы установите cookie, как во втором примере выше
mydomain.com
, он будет доступенsubdomain.mydomain.com
, и наоборот. Это также может быть использовано для разрешенияsub1.mydomain.com
иsub2.mydomain.com
обмена файлами cookie.Смотрите также:
источник
domain=.mydomain.com
недействительными для голого mydomain.com, поэтому два RFC не совместимы друг с другом.Я не уверен, что ответ @cmbuckley показывает полную картину. Я читаю это:
Также
Для меня это означает, что вы можете защитить куки от чтения субдоменом / доменом, но не можете предотвратить запись куки на другие домены. Таким образом, кто-то может переписать файлы cookie вашего сайта, контролируя другой поддомен, посещаемый тем же браузером. Что не может быть большой проблемой.
Потрясающий тестовый сайт cookie, предоставленный @cmbuckley / для тех, кто пропустил его в своем ответе, как я; стоит прокрутить вверх и вверх /:
источник
domain
, cookie используется только для хоста запроса. Это означает, чтоSet-Cookie: name=value
frommydomain.com
не будет отправлено с запросами к поддоменам. Поиграйте с этим тестовым скриптом тоже.Вот пример использования API cookie DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), поэтому мы можем сами убедиться в этом.
Если мы выполним следующий JavaScript:
Это похоже на выполнение:
Ключ cookie становится доступным (только) на домене mydomain.com .
Теперь, если вы выполните следующий JavaScript на mydomain.com:
Ключ cookie становится доступным для mydomain.com, а также subdomain.mydomain.com .
Наконец, если вы попытаетесь выполнить на subdomain.mydomain.com следующее:
Ключ cookie становится доступным для subdomain.mydomain.com ? Я был немного удивлен, что это разрешено; Я предполагал, что для субдомена будет нарушением безопасности возможность установки файла cookie в родительском домене.
источник
httponly
файлов cookie и тип файлов cookie, которые вы создаете.domain
атрибут заставляет куки работать на поддоменах; ни один такой атрибут не делает). Ведущие точки в лучшем случае игнорируются, а в худшем - активно блокируются.Пожалуйста, обратите внимание, что вы можете установить cookie с субдомена в домене.
(отправлено в ответе на запрос
subdomain.mydomain.com
)Но вы НЕ МОЖЕТЕ установить cookie из домена на поддомене.
(отправлено в ответе на запрос
mydomain.com
)ПОЧЕМУ ?
Согласно спецификации RFC 6265 раздел 5.3.6 Модель хранения
и RFC 6265, раздел 5.1.3.
Таким образом, домен «subdomain.mydomain.com» соответствует «mydomain.com», но «mydomain.com» НЕ соответствует домену «subdomain.mydomain.com»
Проверьте этот ответ также.
источник
В обоих случаях да, это может, и это поведение по умолчанию для IE и Edge.
Другие ответы добавляют ценную информацию, но в основном описывают поведение в Chrome. Важно отметить, что в IE поведение совершенно иное. Очень полезный тестовый скрипт CMBuckley демонстрирует, что в (скажем) Chrome файлы cookie не распределяются между корнем и поддоменами, когда домен не указан. Однако тот же тест в IE показывает, что они являются общими. Этот случай IE ближе к описанию возврата домой в ссылке CMBuckley www-or-not-www. Я знаю, что это так, потому что у нас есть система, которая использует разные файлы cookie стека служб как в корневом, так и в поддомене. Все работало нормально, пока кто-то не получил к нему доступ в IE, и две системы боролись за то, чья сессионная cookie победит, пока мы не взорвем кэш.
источник
Будьте осторожны, если вы работаете на localhost! Если вы сохраните свой файл cookie в js, как это:
Это может быть недоступно для вашего субдомена, как
sub.localhost
. Для решения этой проблемы вам нужно использовать виртуальный хост . Например, вы можете настроить свой виртуальный хост,ServerName
localhost.com
после чего вы сможете хранить куки в своем домене и субдомене следующим образом:источник
Простое решение
Пятый параметр Setcookie определяет (под) домены, для которых доступен файл cookie. Установка его в (EXAMPLE.COM) делает его доступным для любого субдомена (например: SUBDOMAIN.EXAMPLE.COM)
Ссылка: http://php.net/manual/en/function.setcookie.php
источник