如何解决在响应axios / ajax调用的每个请求上,PHP会话ID /会话变量值都会更改
我刚刚开始使用react js,并且开始面临一些客户端系统的问题。同时将数据从react js通过(axios或ajax)session_id()重置并在每次请求/调用中重新生成的数据发布到php文件中。会话变量重置。我已经尝试了stackoverflow的一些解决方案,但是没有任何效果。我已经从本地主机和其他一些系统遇到了这个问题。但也可以与其他系统一起使用。就像使用50%系统而不是50%系统。
但是,如果我做同样的事情而没有将js从带有ajax的普通html文件转换为php文件。会话ID未重置或重新生成。
PHP文件
<?php
session_start();
$session_val = session_id();
header("Access-Control-Allow-Origin: *");
echo $session_val;
?>
来自REACT JS的AJAX呼叫
$.ajax({
url: "http://localhost/test.php",type: "POST",data: {
action: action,},success: function (data) {
},error: function (jqXHR,text,errorThrown) {
console.log(jqXHR + " " + text + " " + errorThrown);
},});
AXIOS呼叫
axios
.post('http://localhost/test.php',this.state)
.then(response =>{
console.log(response.data);
})
.catch(
error => {
console.log(error)
});
解决方法
好像您的浏览器没有发送带有AJAX请求的Cookie标头(默认情况下,它们是这样做的,但是我不知道为什么它没有发送它)。
当您的PHP服务器看到没有Cookie标头时,它假定未设置SESSONID并创建一个新的SESSONID,并指示您的客户端将新的SESSIONID存储在其Cookie中。由于此新的SESSIONID不会在下一个请求中发送,因此您的服务器将再次假定相同的内容,并再次创建一个新的SESSIONID。这个过程每次都会发生。
要详细了解Cookie的工作原理,可以参考Using HTTP Cookies。
您可以手动获取cookie并将其作为标头添加到JQuery中的AJAX请求中,如下所示:
$.ajax({
url: "http://localhost/test.php",type: "POST",headers: {"Cookie": document.cookie},data: {
action: action,},success: function (data) {
},error: function (jqXHR,text,errorThrown) {
console.log(jqXHR + " " + text + " " + errorThrown);
},});
AJAX对象的 headers
属性用于将额外的标头添加到HTTP请求。在这里,我们获取浏览器使用document.cookie
存储的cookie,并将其添加到请求标头中的 Cookie 标头中。
让我知道这是否可以解决您的问题。
,根据 Shreyas Sreenivas 的评论,我对Ajax和
使用了 xhrFields:{withCredentials:true}
axios.post('https://example.com/file.php',this.state,{withCredentials:true}); 对于axios,它的工作原理。但是出现了“跨域请求阻止”错误,需要修复。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。