在AJAX调用之后,PHP session_start正在将$ _SESSION全局填充为空数组

时间:2019-02-06 20:40:28

标签: php ajax amazon-web-services memcached

我有一个使用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全局变量最终将作为一个空数组加载。

0 个答案:

没有答案