Cookie работает с субдоменом? [Дубликат]

У меня была та же проблема, которая была решена при запуске исполняемого файла EasyPHP с правами администратора.

Обновление: я не устанавливаю EasyPHP в папку Program Files и никогда не имел этой проблемы снова.

262
задан adam0101 13 June 2017 в 21:04
поделиться

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 и наоборот.

См. Также:

401
ответ дан cmbuckley 17 August 2018 в 10:25
поделиться
  • 1
    Мой вопрос состоял в том, чтобы обмен файлами между domain.com и subdomain.domain.com, а не между www.domain.com и subdomain.domain.com. – adam0101 16 April 2014 в 15:14
  • 2
    Благодаря; Я добавил примечание о значении точки. – cmbuckley 16 April 2014 в 15:34
  • 3
    Я не понимаю, почему вы просто не ставили бы ведущий & quot; & quot; в домене для максимальной совместимости со старыми и новыми – Alan Macdonald 21 December 2015 в 09:56
  • 4
    В старом стандарте cookie с domain=.mydomain.com недействителен для голого mydomain.com, поэтому два RFC несовместимы друг с другом. – cmbuckley 21 December 2015 в 10:27
  • 5
    @Frank, да, я знаю. Мой комментарий заключался в том, чтобы уточнить, что мой вопрос касался обмена кукими между доменом и субдоменом, а не между двумя подобластями. – adam0101 12 February 2018 в 17:43

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

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

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

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

-1
ответ дан Brett Wolfington 17 August 2018 в 10:25
поделиться
  • 1
    Этот вопрос не является специфичным для PHP, я не думаю, что он квалифицируется как действительный. – sergelerator 9 August 2016 в 21:53
  • 2
    Серджелер, я не задавал вопроса. Я отвечал на ОП. – Lawes 26 September 2017 в 21:01
  • 3
    @Lawes Я считаю, что sergelator означает, что вопрос OP не является специфичным для PHP, тогда как ваш ответ, похоже, является решением только для PHP, следовательно, он не будет отвечать требованиям OP. – Mirage 15 March 2018 в 22:50
  • 4
    @Mirage отметил ... Спасибо за разъяснение ... – Lawes 16 March 2018 в 17:18

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

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

3
ответ дан DannyW 17 August 2018 в 10:25
поделиться

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

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

document.cookie = "key = value"

Появляется чтобы быть таким же, как выполнение:

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

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


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

< blockquote>

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 в родительском домене.

9
ответ дан llambda 17 August 2018 в 10:25
поделиться
  • 1
    Это заставляет меня задаться вопросом, существуют ли отдельные спецификации, описывающие поведение файлов cookie httponly в сравнении с типами файлов cookie, которые вы создаете. – adam0101 26 September 2017 в 21:37
  • 2
    Опубликованные вами документы не согласуются с вашими заявлениями. Первые 2 примера эквивалентны не (атрибут domain заставляет cookie работать на поддоменах, никакого такого атрибута нет). Ведущие точки в лучшем случае игнорируются и активно блокируются в худшем случае. – cmbuckley 11 January 2018 в 21:44

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

Если атрибуты файла cookie не указывают иначе, cookie возвращается только на исходный сервер (а не, например, на любые поддомены), и он истекает в конце текущий сеанс (определенный пользовательским агентом). Пользовательские агенты игнорируют непризнанный файл cookie.

RFC 6265

Также

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 / для тех, кто пропустил его в своем ответе, как я; стоит прокрутка вверх и вверх /:

17
ответ дан Velda 17 August 2018 в 10:25
поделиться
  • 1
    Это похоже на то, что я говорю: если вы не укажете domain, cookie будет использоваться только для узла запроса. Это означает, что Set-Cookie: name=value из mydomain.com не будет отправляться с запросами на поддомены. Поиграйте с этим тестовым скриптом . – cmbuckley 21 July 2016 в 10:00
  • 2
    @cmbuckley, хорошо, что вы сказали, кажется правильным. Я изменю свой ответ. Спасибо, что указали это. – akostadinov 21 July 2016 в 22:14
  • 3
    Необходимо указать, что раздел 4.1.2 (первая цитата) не является нормативным ... – Velda 26 July 2018 в 12:07
Другие вопросы по тегам:

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