在 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 问题