首页 > 解决方案 > 为什么在 AJAX 调用中无法访问 SESSION 变量?

问题描述

我在我的脚本中使用 AJAX 调用从我的 php 脚本中获取一些数据。AJAX 调用正确执行,到目前为止我已经测试过了。但不幸的是,SESSION 变量似乎不可用。

我目前正在重构一些代码,这个 AJAX 调用转到一些以前与脚本代码位于同一文件中的代码。在那里,相应的 php 代码仍然执行,并且 SESSION 变量肯定在那里可用,否则整个页面会中断(可能)。

所以我想知道我是否忘记在我的php文件中包含一些东西或类似的东西?

编辑:我将尝试给出所描述行为背后的代码的最小示例。

Calling.php 中的代码(是的,它的 javascript,但作者(不是我)曾经决定制作一个包含 HTML、javascript 和 php 的 php 文件......):

<?php session_start(); ?>
<script>
//Lots of Code
function Caller(){
$.ajax({
type:"POST",
url:'called.php',
success: function(data){
//debugging function taking data;
},
error: function(xhr, statusText, err){
//debugging function taking xhr.status
}
}

)
}
//Lots of Code
</script>

call.php 中的代码

<?php
$test = $_SESSION["loggedUser"];

echo $test;
?>

标签: javascriptphpajax

解决方案


Ajax 调用与所服务的原始页面不同,并且需要为每个请求session_start再次调用。

您可以安全地执行此操作(如果已调用,则不会出现错误或警告),如下所示:

if ( is_null($_SESSION) || !$_SESSION )
{
    session_start();
}

这应该存在于您的引导程序或索引文件中,并且在任何基于请求的逻辑运行之前,应该始终从对 php 的所有请求中调用/包含/需要。


推荐阅读