Не удалось создать сеанс в php при вызове AJAX

У меня есть файл example.com/login.php в корневом домене с этим кодом

header('Access-Control-Allow-Origin: *'); session_set_cookie_params(0, '/', '.example.com'); session_name('lusession'); session_start(); $_SESSION['name'] = $_GET['name']; $_SESSION['useremail'] = $_GET['useremail']; $_SESSION['password'] = $_GET['password']; 

Этот файл снабжен учетными данными, а затем создает сеанс входа в систему. Он вызывается из основного домена и поддоменов AJAX.

Проблема заключается в том, что он не создает сеанс при вызове через AJAX, но при открытии непосредственно в браузере в качестве querystring он создает кросс-доменную сессию, как ожидалось.

Другие страницы, которые называют это через AJAX, имеют следующий код в начале:

 session_set_cookie_params(0, '/', '.example.com'); session_name('lusession'); session_start(); 

Если я добавлю следующий код в login.php, он отобразит в ответе AJAX, что этот сеанс создан. Но этот сеанс недоступен на страницах в том же домене и на других поддоменах.

 echo 'session created for'.$_SESSION['name']; 

Проверка ресурса показывает, что вызов AJAX создает сеансовый файл cookie с именем «lusession», как и должно быть.

Доступ к сеансовому файлу с помощью языков сценариев контролируется параметром конфигурации session.cookie_httponly . Или вы можете использовать 5-й параметр session_set_cookie_params() если вы предпочитаете это.

Хорошо разобрался.

Actualy AJAX вызывает только отправку Cookies, если URL-адрес, который вы вызываете, находится в том же домене, что и ваш сценарий вызова. Субдомены считаются отдельными доменами. Хотя этот код создает кросс-поддомен сессий, но AJAX участвует преступник.

Как и в этом случае, я пытаюсь вызвать url из domain.com, в то время как мой сценарий вызова находится на sub.domain.com (другими словами: я сделал перекрестный доменный вызов, и в этом случае браузер не отправил файлы cookie для защиты Конфиденциальность).

Решение, которое сработало для меня, – это поставить файл login.php на каждый поддомен для вызовов из этого поддомена. Таким образом были созданы сеансы, и как только сеанс создается на одном поддомене, он доступен на всех поддоменах по мере необходимости.