首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >PHP会话ID /会话变量值随每个来自react / ajax调用的请求而变化

PHP会话ID /会话变量值随每个来自react / ajax调用的请求而变化
EN

Stack Overflow用户
提问于 2020-08-17 05:57:44
回答 2查看 1.2K关注 0票数 0

我刚刚开始使用react,并开始面临来自某些客户端系统的一些问题。当将数据通过(axios或ajax)将数据发送到php文件时,session_id()会在每个请求/调用中重置和重新生成。也是会话变量重置。我尝试过一些堆叠溢出的解决方案,但没有成功,我从本地主机和其他一些系统中遇到了这个问题。但也和其他一些系统一起工作。这就像使用50%的系统,而不是使用50%的系统。

但是,如果我做同样的事情而没有反应js从普通的html文件到ajax到php文件。会话id不重置或重新生成。

文件

代码语言:javascript
代码运行次数:0
运行
复制
<?php
session_start();
$session_val = session_id();
 header("Access-Control-Allow-Origin: *");

echo $session_val;

?>

来自REACT 的AJAX调用

代码语言:javascript
代码运行次数:0
运行
复制
$.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调用

代码语言:javascript
代码运行次数:0
运行
复制
    axios
    .post('http://localhost/test.php', this.state)
    .then(response =>{
        console.log(response.data);

    })
    .catch(
     error => {
        console.log(error)
    });
EN

回答 2

Stack Overflow用户

发布于 2020-08-17 08:21:08

看起来您的浏览器并没有用AJAX请求发送Cookie头(默认情况下他们会这样做,但我不知道为什么它不发送它)。

当PHP服务器看到没有Cookie头时,它假设没有设置SESSONID,并创建一个新的SESSONID,并指示客户端将新的SESSIONID存储在其Cookie中。由于在下一个请求中没有发送这个新的SESSIONID,所以您的服务器再次假设相同的情况,并再次创建一个新的SESSIONID。这个过程每次都会发生。

要了解更多关于cookie工作方式的信息,可以参考使用HTTP Cookies

您可以手动获取cookie,并将其作为头添加到JQuery中的AJAX请求中,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
$.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头中。

如果这能解决你的问题请告诉我。

票数 0
EN

Stack Overflow用户

发布于 2020-08-18 12:23:37

根据Shreyas Sreenivas注释,我使用了xhrFields:{ withCredentials: true }

axios.post('https://example.com/file.php',this.state,{withCredentials: true});用于axios,它工作了。但是,出现了一些跨源请求阻塞错误,需要修复。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63445307

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档