【问题标题】:Session ID lost (ajax + PHP)会话 ID 丢失(ajax + PHP)
【发布时间】:2020-07-11 01:50:04
【问题描述】:

我遇到了 AJAX + PHP 会话 ID 的问题,其中一个新 ID 是由通过 GET 获取的脚本生成的。我创建了 2 个暴露问题的测试脚本:

脚本 1(注释掉 AJAX,但 XMLHttpRequest 和 $.get() 产生相同的结果):

<?php
    session_start();
    ob_start();
    echo('test: '.session_id());

?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="test"></div>
    <script type='text/javascript' src='../node_modules/jquery/dist/jquery.js?<?echo($time)?>'></script>
    <script type="text/javascript">
        $(document).ready(function() {
            var xhr = new XMLHttpRequest()
            xhr.onreadystatechange = function () {
                if(xhr.readyState === 4 && xhr.status === 200) {
                    document.getElementById('test').innerHTML=this.responseText;
                    resolve('page loaded');
                }
            }
            xhr.open("GET",'http://10.1.1.101/testLinks/test2.php');
            xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhr.send();
            // $.get('test2.php').done(function(val) {
            //     document.getElementById('test').innerHTML=val;
            // })
        });
    </script>
</body>
</html>

脚本 2:

<?php
    session_start();
    ob_start();
    echo('test2: '.session_id());
?>

输出:

test: 4occu9mq6o3c16au254grf0s56
test2: 6bk1fdbs3v2bcl9iko31s5nqp4

查看其他线程,我已经验证了启用 cookie 的 php 设置,以及生命周期:

php session info

我已验证当我include 'test2.php'; 时不会生成新的会话 ID。仅在使用 AJAX 时。

我不确定这里还有什么可以看的。任何建议表示赞赏。

编辑:为了清楚起见,我使用的是 JQuery 3.4.0,但是,在切换到 XMLHttpRequest 后,我​​不认为这是 JQuery 错误,并且与 PHP 的某些配置有关,但我不是确定什么。

【问题讨论】:

  • 有意思,为什么要包含 jQuery 库,然后使用 Raw Javascript AJAX
  • @RiggsFolly 我也使用了 $.get() 并产生了相同的结果。只是将其全部保留以表明我也尝试过使用 JQuery 库。
  • 您是否在浏览器网址中使用http://10.1.1.101 访问此脚本?
  • @LawrenceCherone 是的 - 这是两个脚本所在的服务器的 IP。

标签: php ajax session


【解决方案1】:

我们最终解决了这个问题。我们部署的服务器通过 http(端口 80)运行应用程序。我们生成了 SSL 证书并切换到 HTTPS(端口 443),cookie 能够保存 PHPSESSID 而无需重新生成。不过,这可能与组织中的某些安全设置有关,但希望这对遇到相同问题的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-10
    • 2012-05-09
    • 2012-06-03
    • 1970-01-01
    • 2014-04-18
    • 1970-01-01
    • 2011-12-05
    相关资源
    最近更新 更多