使用fetch API

时间:2018-03-30 21:57:25

标签: javascript php

所以我在一个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,但问题仍然存在。

2 个答案:

答案 0 :(得分:2)

这是因为PHP不知道您当前的会话。通常通过在其中放置具有会话ID的cookie来跟踪PHP会话,然后在向脚本发出请求时从cookie中读取。但是,Fetch api默认情况下不会发送带有请求的cookie。

  

https://fetch.spec.whatwg.org/#concept-request-credentials-mode

     

请求具有关联的凭据模式,即“省略”,   “同源”或“包括”。 除非另有说明,否则为“省略”

因此,您需要将“申请凭据”属性设置为same-origininclude

same-orign - 仅包含对同一域名请求的凭据(如Cookie)

包含 - 始终发送凭据

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

答案 1 :(得分:1)

您需要将凭据设置为' include'在进行获取请求时。

https://developers.google.com/web/updates/2015/03/introduction-to-fetch#sending_credentials_with_a_fetch_request

fetch(url, {
  credentials: 'include'
})