所以我在一个 php 文件中设置 session 变量
session_start();
$_SESSION['user'] = $row['user'];
$_SESSION['role'] = $row['role'];
然后我尝试访问另一个 php 文件中的这些值
session_start();
session_regenerate_id();
var_dump($_SESSION);
if(!isset($_SESSION['user']) || !isset($_SESSION['role'])) {
header(':', true, 401);
exit;
}
在设置它们后立即打印出来时,这些值看起来很好,但是在第一个片段中 var_dump 返回 $_SESSION 为空。我认为这可能是 javascript(或更具体地说是 fetch API)问题,因为当我使用 postman 处理这些请求时,所有值都被保存得很好。我尝试过使用ajax,但问题仍然存在。
最佳答案
这是因为 PHP 不知道您当前的 session 。 PHP session 通常通过放置一个带有 session ID 的 cookie 来跟踪,然后在向脚本发出请求时从 cookie 中读取。但是,Fetch api 默认情况下不会随请求发送 cookie。
https://fetch.spec.whatwg.org/#concept-request-credentials-mode
A request has an associated credentials mode, which is "omit", "same-origin", or "include". Unless stated otherwise, it is "omit".
因此您需要将请求凭证属性设置为same-origin
或include
同源 - 仅包含对同源域的请求的凭据,例如 cookie
包含 - 始终发送凭据
fetch("/url/endpoint",{
credentials:"same-origin"
})
关于javascript - 使用 fetch API 时不保存 PHP session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581938/