SessionID随每个HTTP请求而变化

时间:2016-06-15 02:37:15

标签: php angularjs http session reactjs

我刚刚开始使用fetch API来发送我的数据,就像ReactJS推荐的那样。在此之前,为了向我的服务器发送API请求,我使用了AngularJS。我目前遇到最烦人的错误,发送HTTP请求无法加载正确的会话。

首先,我的Web应用程序使用PHP API来公开自己,并且(现在基本上是)一堆.php文件来获取应用程序的一部分。其中一个是authenticateUser.php,它会对会话进行身份验证和存储。但是,我注意到我的fetch的HTTP请求无法正常工作,因为getCurrentUser.php等其他内容返回NotLoggedIn,尽管只是进行身份验证。我认为它可能与会话有关,所以在authenticateUser.php上,我设置了.php文件,在通过以下身份验证后输出当前session_id。{echo array('session_id' => session_id()); < / p>

我注意到,基本上,当我自己在浏览器中加载网址时:myapp.com/php/http/user/authenticateUser.php,我获得的session_id与使用fetch时获得的完全不同:

return fetch("/php/http/user/authenticateUser.php", {
    method: "post",
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    }
}).then(function(successResponse) {
    return successResponse.json();
}, function(errorResponse) {
    console.log(errorResponse);
}).then(function(data) {
    console.log(data);
});

我进一步检查并认为可能是因为fetch正在查询我的网站http版本而不是我网站的非HTTP版本。所以我改变了authenticateUser.php上的逻辑,这样如果它检测到会话存在,它会打印出session_id,否则它会创建并打印出新的会话。每当我发送带有fetch的HTTP请求时,我都会得到一个不同的session_id,这意味着我的session_id随每个请求而变化。这是我使用的代码:

header("Content-Type: application/json"); 
if (session_status() == PHP_SESSION_NONE) {
    session_start();
}
http_response_code(200);
echo json_encode(array('session_id' => session_id()),JSON_PRETTY_PRINT);

我错过了与fetch API或标头完全不同的内容吗?或者有没有人有这方面的经验可能会启发我?

1 个答案:

答案 0 :(得分:1)

答案是fetch默认情况下不发送cookie,您需要通过以下方式指定:

credentials: same-origin