【发布时间】: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 设置,以及生命周期:
我已验证当我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。