我有一个使用memcached(托管在aws上)存储用户会话的PHP7服务器。页面加载后,某些页面还将对调用session_start()的脚本进行ajax调用。同时,在页面完全加载之前,还有其他脚本在运行,这些脚本也调用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全局变量最终将作为一个空数组加载。