我刚刚开始使用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或标头完全不同的内容吗?或者有没有人有这方面的经验可能会启发我?
答案 0 :(得分:1)
答案是fetch
默认情况下不发送cookie,您需要通过以下方式指定:
credentials: same-origin