【问题标题】:PHP Session Only Works On Some PagesPHP 会话仅适用于某些页面
【发布时间】:2017-11-04 11:18:07
【问题描述】:

这有点奇怪。好的,所以我正在使用会话来了解用户何时登录。当用户登录时,会创建一个会话。

我遇到的问题是会话在某些页面上不起作用。当我在我的索引页面上执行var_dump($_SESSION['u_up']); 时,它会显示会话:array(1) { ["u_up"]=> string(7) "example" },但是当我对另一个脚本进行 Ajax 调用并执行相同的 var_dump($_SESSION['u_up']); 时,它会返回一个空数组:array(0){}

有人知道为什么会这样吗?我在两个文件的顶部都有session_start(),但不知何故我的第二个脚本不会在我的会话中出现。非常感谢任何帮助!

这是我的简单 Ajax 脚本:

//Update to not view tutorial           
$.ajax({
    type: "POST",
    url: 'http://192.168.1.75/php/script.php',
    success: function(data){
        console.log(data);
    }
});

【问题讨论】:

  • 你的两个页面是否在同一个域/子域上?
  • 您显示的代码不足以找出解决方案,添加 ajax 脚本和 php 脚本的基本部分不起作用
  • 请确保您的php.ini 文件确实有这个:session.use_cookies = 1 并且路径设置为session_save
  • 好的,我添加了我的 Ajax 脚本,是的,这两个脚本都在我的本地环境中。

标签: php ajax session


【解决方案1】:

你在做一个跨域请求,192.168.1.75localhost不被认为是同一个域,不共享cookies。

出于安全原因,跨域请求不包括 cookie。如果您不发送 phpsessid cookie,您将无法检索旧的 php 会话,这将使您的会话为空。

除此之外,我强烈建议您使用相对路径来避免将来出现此类问题。

$.ajax({
    type: "POST",
    url: '/php/script.php',
    success: function(data){
        console.log(data);
    }
});

【讨论】:

    【解决方案2】:

    好吧,事实证明我必须将 Ajax 请求中的 url 更改为 localhost。所以它最终看起来像这样:

    //Update to not view tutorial           
    $.ajax({
        type: "POST",
        url: 'http://localhost/php/script.php',
        success: function(data){
            console.log(data);
        }
    });
    

    真的不知道为什么我必须指定 localhost 而不能指定我的计算机的 ip。

    猜你喜欢
    • 2023-03-17
    • 2011-07-04
    • 1970-01-01
    • 2014-01-11
    • 1970-01-01
    • 2019-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多