PHP session_start заполняет $ _SESSION global как пустой массив после вызова AJAX - PullRequest
0 голосов
/ 06 февраля 2019

У меня установлен сервер PHP7, использующий memcached (размещенный на aws) для хранения пользовательских сессий.После загрузки страницы некоторые страницы также сделают ajax-вызов скрипта, который вызывает session_start ().В то же время существуют другие сценарии, выполняемые до полной загрузки страницы, которые также вызывают session_start ().

Когда я загружаю страницу без вызова ajax, у меня нет проблем, и пользовательский сеанс загружается просто отлично.Когда я загружаю страницу с помощью вызова ajax в сценарий, который также вызывает session_start (), суперглобальный $ _SESSION заполняется как пустой массив, а не как пользовательские данные $ _SESSION.Это приводит к тому, что пользователь выходит из приложения

Это происходит только при включенной функции memcached.Если я отключу memcached и использую хранилище файлов php по умолчанию, я никогда не столкнусь с проблемами.

Пример сценария php:

class testServer {
    public function testServeRequest(){
        global $sugar_config;
        global $current_language;
        global $log;

        if (!empty($sugar_config['session_dir'])) {
            session_save_path($sugar_config['session_dir']);
        }

        session_start();
        $current_language = $sugar_config['default_language'];
}

$server = new testServer();
$server->testServeRequest();

Пример вызова js:

var callback = {
    success: function (result){
        console.log('testing this thing');
    }
};

var url = "test_server.php?type=vfb&source=outlook&user_id=456d843f-4ca0-ff2f-c329-578ea4cdebfa";
YAHOO.util.Connect.asyncRequest('GET', url, callback, false);
});

Это расширенный пример сценария, который я использовал для тестирования.Если я удалю строку session_start (), глобальная переменная $ _SESSION в других скриптах будет загружена просто отлично.Но оставив его внутри, глобальная переменная $ _SESSION в конечном итоге загружается как пустой массив.

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