javascript - 使用 fetch API 时不保存 PHP session 变量

标签 javascript php

所以我在一个 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-origininclude

同源 - 仅包含对同源域的请求的凭据,例如 cookie

包含 - 始终发送凭据

fetch("/url/endpoint",{
  credentials:"same-origin"
})

关于javascript - 使用 fetch API 时不保存 PHP session 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49581938/

相关文章:

javascript - 如何将 PHP JSON 转换为 JS 数组

php - 如何使用 javascript (Jquery) 检索查询字符串参数和值?

javascript - 如何在 API 调用中传递 key 作为授权 header

php - Bootstrap 表仅在 <td> 中显示一行

Javascript 表单验证

javascript - ES6 故障软解构

javascript - 使用 Javascript 设置元素的宽度会产生意想不到的结果

javascript - 使用 javascript 将值插入数组

php - 确定哪些用户上传了图像?

php - 如何从帖子内容中提取 WordPress 简码属性