У меня есть файл 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 на каждый поддомен для вызовов из этого поддомена. Таким образом были созданы сеансы, и как только сеанс создается на одном поддомене, он доступен на всех поддоменах по мере необходимости.