У меня была та же проблема, которая была решена при запуске исполняемого файла EasyPHP с правами администратора.
Обновление: я не устанавливаю EasyPHP в папку Program Files
и никогда не имел этой проблемы снова.
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
и наоборот.
См. Также:
Простое решение
setcookie("NAME", "VALUE", time()+3600, '/', EXAMPLE.COM);
5-й параметр Setcookie определяет (под) домены, доступные для файла cookie. Установка его в (EXAMPLE.COM) делает его доступным для любого поддомена (например: SUBDOMAIN.EXAMPLE.COM)
В обоих случаях да, это может быть, и это поведение по умолчанию для IE и Edge.
Другие ответы добавляют ценную информацию, но в основном описывают поведение в Chrome. важно отметить, что поведение в IE совершенно иное. Очень полезный тестовый скрипт CMBuckley демонстрирует, что в (скажем) Chrome куки не распределяются между корневыми и субдоменами, когда ни один домен не указан. Однако тот же тест в IE показывает, что они являются общими. Этот пример IE ближе к описанию перехвата в ссылке www-or-not-www в CMBuckley. Я знаю, что это так, потому что у нас есть система, которая использовала различные cookie-файлы cookie как для корня, так и для субдомена. Все работало нормально, пока кто-то не обратился к нему в IE, и две системы сражались над тем, чей сеанс cookie выиграл, пока мы не взорвали кеш.
Вот пример использования API cookie DOM ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), поэтому мы можем видеть
Если мы выполним следующий JavaScript:
document.cookie = "key = value"
blockquote>Появляется чтобы быть таким же, как выполнение:
document.cookie = "key = value; domain = mydomain.com"
blockquote>Кнопка cookie становится доступным (только) в домене mydomain.com .
Теперь, если вы выполните следующий JavaScript на mydomain.com:
< blockquote>document.cookie = "key = value; domain = .mydomain.com"
blockquote>Кнопка cookie становится доступной для mydomain. com , а также subdomain.mydomain.com .
Наконец, если вы попытаетесь выполнить следующее на subdomain.mydomain.com:
document.cookie = "key = value; domain = .mydomain.com"
blockquote>Доступна ли кнопка cookie для subdomain.mydomain.com ? Я был немного удивлен, что это разрешено; Я предположил, что было бы нарушением безопасности для субдомена, чтобы он мог установить cookie в родительском домене.
httponly
в сравнении с типами файлов cookie, которые вы создаете.
– adam0101
26 September 2017 в 21:37
domain
заставляет cookie работать на поддоменах, никакого такого атрибута нет). Ведущие точки в лучшем случае игнорируются и активно блокируются в худшем случае.
– cmbuckley
11 January 2018 в 21:44
Я не уверен, что ответ @cmbuckley показывает полную картину. Я читал:
Если атрибуты файла cookie не указывают иначе, cookie возвращается только на исходный сервер (а не, например, на любые поддомены), и он истекает в конце текущий сеанс (определенный пользовательским агентом). Пользовательские агенты игнорируют непризнанный файл cookie.
blockquote>Также
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 вашего сайта, контролируя другой поддомен, посещенный тем же браузером. Который не может быть большой проблемой.
Удивительный тестовый сайт cookie, предоставленный @cmbuckley / для тех, кто пропустил его в своем ответе, как я; стоит прокрутка вверх и вверх /:
domain
, cookie будет использоваться только для узла запроса. Это означает, что Set-Cookie: name=value
из mydomain.com
не будет отправляться с запросами на поддомены. Поиграйте с этим тестовым скриптом .
– cmbuckley
21 July 2016 в 10:00
domain.com
иsubdomain.domain.com
, а не междуwww.domain.com
иsubdomain.domain.com
. – adam0101 16 April 2014 в 15:14domain=.mydomain.com
недействителен для голого mydomain.com, поэтому два RFC несовместимы друг с другом. – cmbuckley 21 December 2015 в 10:27