Совместное использование cookie между субдоменом и доменом

У меня есть два вопроса. Я понимаю, что если я укажу домен как .mydomain.com (с ведущей точкой) в cookie, чтобы все поддомены могли совместно использовать файл cookie.

Может ли subdomain.mydomain.com получить доступ к файлу cookie, созданному в mydomain.com (без субдомена www)?

Может mydomain.com (без субдомена www) получить доступ к файлу cookie, если он создан в subdomain.mydomain.com?

+210
28 авг. '13 в 15:46
источник поделиться
5 ответов

2 домена mydomain.com и subdomain.mydomain.com могут передавать только файлы cookie, если домен явно указан в заголовке Set-Cookie. В противном случае объем файла cookie ограничивается узлом запроса. (Это называется "cookie только для хоста". См. Что такое только cookie для хоста?)

Например, если вы отправили следующий заголовок из subdomain.mydomain.com:

Set-Cookie: name=value

Затем cookie не будет отправляться для запросов mydomain.com. Однако, если вы используете следующее, оно будет использоваться в обоих доменах:

Set-Cookie: name=value; domain=mydomain.com

В RFC 2109 домен без ведущей точки означал, что он не может использоваться на поддоменах и только ведущая точка (.mydomain.com) позволит использовать его в субдоменах.

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

Итак, если вы установите cookie как второй пример выше из mydomain.com, он будет доступен subdomain.mydomain.com и наоборот.

См. также:

+319
15 апр. '14 в 14:07
источник

Связанные вопросы


Похожие вопросы

Я не уверен, что ответ @cmbuckley показывает полную картину. Я читал:

   Unless the cookie attributes indicate otherwise, the cookie is
   returned only to the origin server (and not, for example, to any
   subdomains), and it expires at the end of the current session (as
   defined by the user agent).  User agents ignore unrecognized cookie
   attributes (but not the entire cookie).

Кроме

8.6.  Weak Integrity

   Cookies do not provide integrity guarantees for sibling domains (and
   their subdomains).  For example, consider foo.example.com and
   bar.example.com.  The foo.example.com server can set a cookie with a
   Domain attribute of "example.com" (possibly overwriting an existing
   "example.com" cookie set by bar.example.com), and the user agent will
   include that cookie in HTTP requests to bar.example.com.  In the
   worst case, bar.example.com will be unable to distinguish this cookie
   from a cookie it set itself.  The foo.example.com server might be
   able to leverage this ability to mount an attack against
   bar.example.com.

Для меня это означает, что вы можете защитить файлы cookie от чтения субдоменом/доменом, но не можете запретить писать файлы cookie в другие домены. Таким образом, кто-то может переписать cookie вашего сайта, контролируя другой поддомен, посещенный тем же браузером. Что не может быть большой проблемой.

Удивительный тестовый сайт куки, предоставленный @cmbuckley/для тех, кто пропустил его в своем ответе, как я; стоит прокручивать и увеличивать /:

+12
06 июн. '16 в 11:59
источник

Вот пример использования API cookie DOM (https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie), поэтому мы можем видеть сами по себе поведение.

Если мы выполним следующий JavaScript:

document.cookie = "ключ = значение"

Это похоже на выполнение:

document.cookie = "key = value; domain = mydomain.com"

Ключ файла cookie становится доступным (только) в домене mydomain.com.


Теперь, если вы выполните следующий JavaScript на mydomain.com:

document.cookie = "key = value; domain =.mydomain.com"

Ключ файла cookie становится доступным для mydomain.com, а также для subdomain.mydomain.com.


Наконец, если вы попытаетесь выполнить следующее на subdomain.mydomain.com:

document.cookie = "key = value; domain =.mydomain.com"

Доступен ли ключ cookie для subdomain.mydomain.com? Я был немного удивлен, что это разрешено; Я предположил, что было бы нарушением безопасности для субдомена, чтобы он мог установить cookie в родительском домене.

+4
26 сент. '17 в 19:45
источник

В обоих случаях да, это может быть, и это поведение по умолчанию для IE и Edge.

Другие ответы добавляют ценную информацию, но в основном описывают поведение в Chrome. важно отметить, что поведение в IE совершенно иное. CMBuckley очень полезный тест script демонстрирует, что в (скажем) Chrome куки не распределяются между корневыми и поддоменами, когда домен не указан. Однако тот же тест в IE показывает, что они являются общими. Этот пример IE ближе к описанию перехвата в ссылке CMBuckley www-or-not-www. Я знаю, что это так, потому что у нас есть система, которая использовала различные cookie файлы cookie как для корня, так и для субдомена. Все работало нормально, пока кто-то не обратился к нему в IE, и две системы сражались над тем, чей сеанс cookie выиграл, пока мы не взорвали кеш.

+2
06 июн. '17 в 5:57
источник

Простое решение

setcookie("NAME", "VALUE", time()+3600, '/', EXAMPLE.COM);

Параметр Setcookie 5th определяет (под) домены, к которым доступен файл cookie. Установка его на (EXAMPLE.COM) делает его доступным для любого субдомена (например: SUBDOMAIN.EXAMPLE.COM)

Ссылка: http://php.net/manual/en/function.setcookie.php

-3
20 мая '16 в 13:09
источник

Посмотрите другие вопросы по меткам или Задайте вопрос