Идентификатор сеанса изменяется в поддоменах - при вызове через AJAX - PullRequest
0 голосов
/ 26 января 2019

У меня есть домен, example.com .В этом домене у меня есть два поддоменов: code.example.com и www.example.com .

В моем файле php.ini есть следующая строка:session.cookie_domain = ".example.com"

Если у меня есть простая страница PHP на code.example.com , которая устанавливает переменную сеанса PHP, то страница на www.example.com можетпрочитайте эту переменную сеанса.

code.example.com / test.php

session_start();
$_SESSION["testa"] = "a";

www.example.com / test.php

session_start();
echo("session testa = " . $_SESSION["testa"]);

Это доказано и работает.Это правильно повторяет, сеанс testa = a .

Однако, если я делаю то же самое, но на этот раз, если у меня есть страница на www.example.com это вызывает code.example.com / test.php через AJAX, когда я читаю переменную сеанса в www.example.com / test.php , происходит сбой.Переменная сеанса не существует.

Я проследил это, используя Сеть> Файлы cookie в Инструментах разработки в Firefox.Я могу подтвердить, что идентификаторы сессий действительно отличаются и не передаются корректно при выполнении этого через AJAX.

В моем вызове AJAX у меня есть crossDomain: true, а в моих файлах PHP у меня установлено header("Access-Control-Allow-Origin: *");.

Я действительно в растерянности.

Все поиски, которые я говорю, чтобы изменить файл php.ini.Но я сделал это.Сеансы между поддоменами работают.Только не при вызове через AJAX.

Любые идеи очень ценятся.

Спасибо!

1 Ответ

0 голосов
/ 26 января 2019

Не включайте «.» перед доменным именем верхнего уровня. Также httprequestobject needs (bool) obj.withCredentials = tree; для объекта для доступа к междоменным куки.

...