Подтвердить что ты не робот

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

В приложении, которое я пишу, используя сочетание среды разработки и языков, мне нужно получить доступ к файлу 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 возвращает 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

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

Cookies, установленные в домене

'.aaa.sub.domain.com'

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

'.sub.domain.com'

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

Из php.net о setCookie -функция:

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

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

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

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