У меня установлен сервер 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 в конечном итоге загружается как пустой массив.