#javascript #jquery #ajax #cookies #subdomain
#javascript #jquery — jquery — запрос #ajax #файлы cookie #поддомен #jquery
Вопрос:
У меня проблема. Я надеюсь, вы поможете мне решить это.
Я создаю чат с ДЛИТЕЛЬНЫМ опросом. Чтобы сохранить ajax-запросы основного домена (отправить сообщение) нетронутыми (без очереди), мне пришлось поместить мой скрипт длительного опроса в поддомен. Итак, у меня есть 2 «домена»
foo.cz channel.foo.cz
Я не возражаю против какой-либо политики того же происхождения прямо сейчас, как я выразился
header("Access-Control-Allow-Origin: *");
в верхней части этого сценария. Я также использую
ini_set('session.cookie_domain', '.foo.cz');
во всех сценариях (отправка, получение, комната чата).
Для отладки у меня есть это в моем channel.foo.cz/getNews.php:
print_r($_SESSION);
print_r($_COOKIE);
die();
Моя проблема в том:
- Я загружаю чат
- Запросы Ajax (jquery) channel.foo.cz/getNews.php
-
getNews.php возвращает это:
array()массив()
- Похоже, что файлы cookie и сеанс не настроены. Но! Если я загляну в свой браузер FF cookie, я действительно увижу, что доменом для этих cookie, установленных в chatRoom, является .foo.cz
-
Если я попытаюсь скопировать uri запроса ajax и вставить его в URL браузера, он вернет мне
массив ([username] => martin) массив ([SESSID] => some1D65a4s6d54asd)
Как это возможно? Извините за длинный вопрос и спасибо за все ответы!
Ответ №1:
Вам нужно посмотреть на третий параметр функции session_set_cookie_params. Он задает доменное имя, в котором допустим файл cookie с SID.
Комментарии:
1. Я сказал, что есть ini_set(‘session.cookie_domain’, ‘.bidmanie.cz ‘); Когда я заглядываю в браузер FF cookie, я вижу правильный домен. Теперь я заметил, что jquery НЕ ОТПРАВЛЯЕТ идентификатор сеанса, поэтому я каждый раз получаю новый идентификатор сеанса!
2. Так что это скорее похоже на какую-то ошибку Javascript или jQuery.
3. Я попробовал это: .ajax({тайм-аут: 52000, заголовки: {Cookie: «PHPSESSID=» SSID}, url:’ channel.foo.cz/getNews.php ?__=’ SSID }); но заголовок запроса не изменяется (не указан cookie: заголовок)
4. Кстати, Ondeji, не могли бы вы дать мне какой-нибудь контакт, например, Skype? Я хотел бы, если бы вы могли помочь мне напрямую, мы говорим на одном языке (CZ) 😉
5. Нет, извините. Мне не нравится предоставлять свою личную контактную информацию, потому что у вас гораздо большая вероятность получить ответ, если вы спрашиваете на общедоступном сайте, подобном SO. Кроме того, мне нравится отвечать на вопросы добровольно, а не если меня заставляют задавать вопросы напрямую в IM. Спасибо за понимание.
Ответ №2:
Я понял. Браузер ограничивает отправку файлов cookie на другой поддомен, поэтому я использовал iframe, который отправляет запрос на мой поддомен. Однако возникали некоторые проблемы, когда сеансы исчезали. Решение? php.ini:
suhosin.session.cryptdocroot=Off
suhosin.cookie.cryptdocroot=Off