我在使用 $_SESSION
时遇到问题AJAX 请求上的 superglobal。session_start()
在任何 session 编码之前调用函数。调用代码和 AJAX 响应代码中的 session ID 也相同(通过在两个脚本中回显 session_id()
进行测试)。 AJAX PHP 文件在同一个域中。一切都应该按照标准的定义工作,但是当我这样做时 print_r($_SESSION)
在调用的 AJAX 脚本文件中,我得到 Arrray( )
输出。
我撞到了砖墙......我不知道为什么这不起作用......
在 Chrome 和 Firefox 中都进行了检查。
有任何想法吗?
更新:
问题出在 $.ajax(...)
要求!当我执行 AJAX 请求时,它知道正确的 session ID,以及 session_start()
函数返回 TRUE
(成功继续 session )但随后它重置了我的 $_SESSSION
超全局!它清空它......我不知道为什么......
代码:
索引.php:
<?php
session_start();
$_SESSION['Test']='O.K.';
echo("SESSION_ID: " . session_id());
echo("SESSION_SIZE:" . sizeof($_SESSION));
?>
... Standard HTML stuff and jQuery include ...
<script>
$.ajax(
{
type: "POST",
url: "AJAXTest.php",
data: null,
success: function(sData) { alert(sData); }
});
</script>
AJAXTest.php:
<?php
session_start();
echo("SESSION_ID: " . session_id());
echo("SESSION_SIZE:" . sizeof($_SESSION));
?>
index.php 输出:
SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx
SESSION_SIZE: 1
警报输出:
SESSION_ID: xxxxxxxxxxxxxxxxxxxxxxx (right session id)
SESSION_SIZE: 0
并且在 AJAX 调用之后 $_SESSION 是空的。在具有相同 session 的所有其他脚本中......我感到困惑......
最佳答案
这可能是因为如果你没有在 $_SESSION
中输入任何值.它会告诉你 array() 做 print_r($_SESSION)
尝试设置一个值 $_SESSION['user']='frankie'
然后做 print_r($_SESSION);
session_id() 永远不会显示在 $_SESSION 数组中。
关于php - 在 AJAX 请求上清空 $_SESSION 超全局变量,但保留 session ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967156/