передача php-сессий с поддоменов, работающих на поддомене, но не ajax-запрос - PullRequest
0 голосов
/ 12 июня 2018

Проблема

У меня есть страница, которая генерируется полностью через JavaScript .Я получаю содержимое, запрашивая данные из сценария PHP на поддомене (ajx.example.com), а затем возвращаю его в формате JSON .

Одно из требований для этогоопределенная страница должна быть «редактируемой», если пользователь вошел в систему (что является одним из ключей в JSON , "isEditable":true). Если я захожу на страницу запроса (на поддомене) напрямую, ипользователь вошел в систему (в основном домене), isEditable - это всегда true. Однако, если я запрашиваю его через Ajax-запрос, это всегда false.

Эти поддомены создаются через VirtualHost на MAMP , и все они указывают на один и тот же каталог.
www.example.com находится в htdocs/example,
ajx.example.comhtdocs/example/ajax, а
v1.examplecdn.com в htdocs/example/cdn.


Код

Вот страница init (www.example.com/app/init.php:

ini_set("session.cookie_domain", ".example.com"); // make sure all sessions are available on all subdomains
error_reporting(E_ALL);
session_start();

// I include the user class here

Вот страница запроса (ajx.example.com/request.php):

require_once "../app/init.php"; // (/htdocs/example/app/init.php)
header("Content-type: application/json;charset=utf-8", false);
header("Access-Control-Allow-Origin: http://www.example.com", false);

$user = new User();
$editable = false;

if($user->loggedIn()){ // check if user is logged in (this is stored in a session on .example.com
    $editable = true;
}
die(json_encode(array("isEditable" => $editable)));

А вот запрос Ajax (* 1056)*):

var container = document.getElementById("container");
ajax({
    url: "//ajx.example.com/request.php", // (/htdocs/example/ajax/request.php)
    dataType: "json",
    success: function(res){
        if(res.isEditable){
            console.log("editable"); // this doesn't come through as isEditable is false.
        }
    }
}); 

Запрос

Если кто-тоn указывает мне, как сделать так, чтобы к этим сеансам PHP можно было получить доступ через эти субдомены, это было бы очень приветствуется!
Cheers.

1 Ответ

0 голосов
/ 12 июня 2018

Вы правы до этой настройки - ini_set ("session.cookie_domain", ".example.com");// убедитесь, что все сеансы доступны во всех поддоменах

Но поскольку у вас разные домены на разных виртуальных машинах, они не могут совместно использовать сеанс, так как каждая виртуальная машина создаст свою собственную копию нового сеанса, чтобы разрешить сеансДля совместного использования вам необходимо сохранить сеансы в БД или в службе кэширования, например в memcache, redis и т. д.

здесь описано объяснение сохранения сеансов в таблице базы данных

Как сохранить данные сеансав базу данных, а не в файловую систему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...