我刚刚开始使用react,并开始面临来自某些客户端系统的一些问题。当将数据通过(axios或ajax)将数据发送到php文件时,session_id()会在每个请求/调用中重置和重新生成。也是会话变量重置。我尝试过一些堆叠溢出的解决方案,但没有成功,我从本地主机和其他一些系统中遇到了这个问题。但也和其他一些系统一起工作。这就像使用50%的系统,而不是使用50%的系统。
但是,如果我做同样的事情而没有反应js从普通的html文件到ajax到php文件。会话id不重置或重新生成。
文件
<?php
session_start();
$session_val = session_id();
header("Access-Control-Allow-Origin: *");
echo $session_val;
?>
来自REACT 的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)
});
发布于 2020-08-17 08:21:08
看起来您的浏览器并没有用AJAX请求发送Cookie头(默认情况下他们会这样做,但我不知道为什么它不发送它)。
当PHP服务器看到没有Cookie头时,它假设没有设置SESSONID,并创建一个新的SESSONID,并指示客户端将新的SESSIONID存储在其Cookie中。由于在下一个请求中没有发送这个新的SESSIONID,所以您的服务器再次假设相同的情况,并再次创建一个新的SESSIONID。这个过程每次都会发生。
要了解更多关于cookie工作方式的信息,可以参考使用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头中。
如果这能解决你的问题请告诉我。
发布于 2020-08-18 12:23:37
根据Shreyas Sreenivas注释,我使用了xhrFields:{ withCredentials: true }
axios.post('https://example.com/file.php',this.state,{withCredentials: true});用于axios,它工作了。但是,出现了一些跨源请求阻塞错误,需要修复。
https://stackoverflow.com/questions/63445307
复制相似问题