【发布时间】:2012-06-13 14:15:03
【问题描述】:
我在处理 AJAX 请求时遇到了 $_SESSION superglobal 问题。
session_start() 函数在任何会话编码之前被调用。会话 ID 在调用代码和 AJAX 响应代码中也相同(通过在两个脚本中回显 session_id() 进行测试)。 AJAX PHP 文件位于同一个域中。一切都应该按照标准的定义工作,但是当我在调用的 AJAX 脚本文件中执行 print_r($_SESSION) 时,我得到了 Arrray( ) 输出。
我碰上了砖墙...我不知道为什么这不起作用...
在 Chrome 和 Firefox 中均已检查。
有什么想法吗?
更新:
问题在于$.ajax(...) 请求!当我执行 AJAX 请求时,它知道正确的会话 ID,并且 session_start() 函数返回 TRUE(成功继续会话),但随后它重置了我的 $_SESSSION 超全局!它清空了……我还不知道为什么……
代码:
index.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_start()之前的代码吗? -
您的浏览器是否启用了cookies?
-
用 var_dump() 检查它
-
你可能遗漏了一些重要的代码。
-
Cookies 已启用,否则不会设置 session_id :) session_start() 之前没有代码并且会话建立成功,否则 session_id() 函数将返回空字符串。来自主脚本和 AJAX 调用脚本的会话 ID 是相同的。 (用回声测试它,如我原来的问题中所写)