所以我在一个php文件中设置会话变量
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)问题,因为当我使用邮递员处理这些请求时,所有值都保存得很好。我尝试过使用ajax,但问题仍然存在。
答案 0 :(得分:2)
这是因为PHP不知道您当前的会话。通常通过在其中放置具有会话ID的cookie来跟踪PHP会话,然后在向脚本发出请求时从cookie中读取。但是,Fetch api默认情况下不会发送带有请求的cookie。
https://fetch.spec.whatwg.org/#concept-request-credentials-mode
请求具有关联的凭据模式,即“省略”, “同源”或“包括”。 除非另有说明,否则为“省略”。
因此,您需要将“申请凭据”属性设置为same-origin
或include
same-orign - 仅包含对同一域名请求的凭据(如Cookie)
包含 - 始终发送凭据
fetch("/url/endpoint",{
credentials:"same-origin"
})
答案 1 :(得分:1)
您需要将凭据设置为' include'在进行获取请求时。
fetch(url, {
credentials: 'include'
})