Куки-файлы по субдоменам и хостам

В приложении, которое я пишу, используя сочетание среды разработки и языков, мне нужно получить доступ к файлу cookie из двух разных поддоменов, каждый из которых находится на отдельном хосте.

Файл cookie устанавливается на www.mydomain.com используя следующий код PHP, и я пытаюсь получить к нему доступ с distant.mydomain.com на отдельном хосте.

 setcookie('token', base64_encode(serialize($token)), time()+10800, '/', '.mydomain.com'); 

Я пытаюсь получить доступ к файлу cookie с distant.mydomain.com используя следующий код:

 if (isset($_COOKIE['token'])) { /* do stuff */ } 

Проблема: distant.mydomain.com не находит файл cookie. if оператор if возвращает false, даже если файл cookie существует.

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

Используя тот же код setcookie , у меня есть старое приложение, работающее исключительно на узле www.mydomain.com , и это приложение имеет доступ к файлу cookie через домены. Это заставляет меня подозревать, что проблема связана с отдельными хостами.

На всякий случай имеет значение любая из следующих данных:
www.mydomain.com – IIS 6.0
distant.mydomain.com – это Apache 2.2.9
– Оба сервера используют PHP 5.2.x
– Оба сервера работают на Windows Server 2003

Если есть какая-либо дополнительная информация, которую я могу предоставить, чтобы лучше описать проблему, пожалуйста, дайте мне знать!

Solutions Collecting From Web of "Куки-файлы по субдоменам и хостам"

В интересах любого, кто читает этот вопрос, код и информация, содержащиеся в исходном посте, точно верны и работают нормально.

Проблема заключается в том, что вы вводите другие технологии. Например, с тех пор я узнал, что отправка PHP-кода через модуль Python, который позволяет Django обслуживать PHP-файлы / контент, сильно изменяет то, что доступно для скрипта, а что нет.

Это было в конечном итоге обнаружено по совету Марка Новаковского , который предложил отправить $_COOKIE в журнал, чтобы узнать, что там было.

Я также проверил $_SERVER и $_GET . Это была пустота $_GET которая подсказывала мне, что установка, которую я пытаюсь использовать, не так проста, как я думал. Это было ошибочное понимание, которое привело к тому, что информация о Django не была включена в исходное сообщение.

Извинения и благодарность всем, кто ответил на этот вопрос!

Куки-файлы в домене

'.aaa.sub.domain.com'

столкнется с одинаково названными файлами cookie, установленными в домене

'.sub.domain.com'

и '.some.stupidly.obscure.multi.sub.domain.com'

Это означает, что (и это заняло некоторое время, чтобы пройти через), если вы собираетесь использовать одноименный cookie для нескольких доменов, вы должны установить его один раз (и только один раз) в основном / базовом домене, в этом случае '. domain.com '; в противном случае результирующий cookie будет неопределенно и случайным образом возвращаться, иногда «яшма» cookie, установленная на .a.domain.com, иногда «яшма» cookie, установленная в .domain.com, иногда cookie ' jasper ', установленный в .bcddomain.com, иногда cookie' jasper ', установленный в' .sub.domain.com ', а иногда и' jasper 'cookie, установленный в' .domain.com '

Использует ли один из поддоменов символ подчеркивания? У IE проблемы с кукисами из субдоменов, которые не соответствуют URI RFC.

Это asumming «отдаленный» является заполнителем, а не фактическим именем субдомена и, конечно, вы используете IE. Хотя больше браузеров вполне может быть реализовано, как, например, Fireworks.

Я бы попробовал установить Charles Proxy и посмотреть, какие заголовки a) отправляются в Firefox, чтобы начать (установить cookie) и b) какие заголовки отправляются из Firefox на второй сервер. По крайней мере, вы можете сузить место проблемы (браузер или сервер).

От php.net о функции setCookie :

Путь на сервере, на котором будет доступен cookie. Если установлено значение '/', файл cookie будет доступен во всем домене. Если установлено значение '/ foo /', cookie будет доступен только в каталоге / foo / и всех подкаталогах, таких как / foo / bar / домена. Значение по умолчанию – это текущий каталог, в который установлен файл cookie.

Домен, доступный для файла cookie. Чтобы сделать файл cookie доступным во всех поддоменах example.com, вы должны установить его на .example.com. . не требуется, но делает его совместимым с большим количеством браузеров. Установка его на http://www.example.com сделает cookie доступным только в субдомене www. Подробнее см. В описании хвоста в спецификации.

В принципе: необходимо проверить ваш параметр 4. и 5. Ну, ваш путь кажется прекрасным, но домен необходимо изменить:

Сегодня вы блокируете файл cookie ко всем другим, кроме домена A, но хотите, чтобы он был доступен как для домена A, так и для B. Это немного сложно, но может быть решена. Вдохните 15 секунд 😉