问题描述
我刚刚开始使用react js,并且开始面临一些客户端系统的问题。同时将数据从react js通过(axios或ajax)session_id()重置并在每次请求/调用中重新生成的数据发布到PHP文件中。会话变量重置。我已经尝试了stackoverflow的一些解决方案,但是没有任何效果。我已经从本地主机和其他一些系统遇到了这个问题。但也可以与其他系统一起使用。就像使用50%系统而不是50%系统。
但是,如果我做同样的事情而没有将js从带有ajax的普通html文件转换为PHP文件。会话ID未重置或重新生成。
<?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,它的工作原理。但是出现了“跨域请求阻止”错误,需要修复。