在 React 中由 Axios 调用时 API 中的 PHP-Session 发生变化

Posted

技术标签:

【中文标题】在 React 中由 Axios 调用时 API 中的 PHP-Session 发生变化【英文标题】:PHP-Session in API changes when called by Axios in React 【发布时间】:2019-07-19 08:35:06 【问题描述】:

我正在使用 php 来编写 Api。 Api 由 React Web 客户端调用。我正在使用 Axio 调用 Api。当我向我的 Api 发送一些东西时,SessionID 不是持久的,它在每次调用后都会改变。有人知道吗?

简化的 PHP-Api:

<?php
session_start();
echo session_id();

/*
//Doesnt mather
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
header('Content-type: application/json; charset=utf-8');
*/
?>

简化的 React-Client

  static vote(vote, callback)
  

    const data = 
      action: 'vote',
      vote: vote,  
    

    axios.post(api_url, qs.stringify(data))
    .then(callback)
    .catch((error) => 
      console.log(error);
    );
  

【问题讨论】:

你不能在 api 中使用 session,session 被用来生成唯一的 id 并通过 cookie 存储在浏览器中;另一个副本也存储在服务器文件系统上;你将需要非传统的方式来实现这个系统; 【参考方案1】:

我不确定这是重复的,还是只是一个非常相关的问题: Make Axios send cookies in its requests automatically

我猜你的 api 和你的客户端在不同的域上运行。在这种情况下,为了让浏览器存储 cookie,您需要 withCredentials: true 作为配置:

axios.post(api_url, qs.stringify(data),  withCredentials: true )

【讨论】:

以上是关于在 React 中由 Axios 调用时 API 中的 PHP-Session 发生变化的主要内容,如果未能解决你的问题,请参考以下文章

AXIOS 调用在 React-Native 0.63 中给出网络错误

React Hook useEffect :使用 axios 和 async await .api 获取数据,调用连续相同的 api

在 React 中通过 axios 调用 API(使用自签名证书)时出现 CORS 问题

React 原生调用 API axios 网络

尝试使用 axios 在 React/Phoenix 应用程序中进行 API 调用(使用早午餐)

使用 React 和 Axios 从 Express API 下载文件