javascript - 为什么在 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;
?>
解决方案
Ajax 调用与所服务的原始页面不同,并且需要为每个请求session_start
再次调用。
您可以安全地执行此操作(如果已调用,则不会出现错误或警告),如下所示:
if ( is_null($_SESSION) || !$_SESSION )
{
session_start();
}
这应该存在于您的引导程序或索引文件中,并且在任何基于请求的逻辑运行之前,应该始终从对 php 的所有请求中调用/包含/需要。
推荐阅读
- android - 从 .gradle 和 .idea 中删除所有内容是否安全?
- tampermonkey - Tampermonkey 的“存储”选项卡在哪里编辑存储内容?
- ruby - 尝试在 Ruby 中复制移动应用程序 POST 请求,出现 502 网关错误
- c++ - 正在跳过 cin 并且 cin.ignore 不起作用
- javascript - 使用 Javascript 更改类的 CSS 样式
- asp.net-core - 如何使用实体框架核心更新与普通 SQL 更新查询相同的多条记录列表?
- layout - 如何在颤动中制作自定义表格小部件?
- php - 当对数据库的调用位于包装器中时,PHP如何获取最后一个插入ID
- android - kotlin-runtime 和 kotlin-stdlib 之间的重复类
- python - ValueError:无法将字符串转换为浮点数:'(1/2)**576'