PHP会话变量是否已设置?
下面是一段从单个.php文件顶部逐字复制和粘贴的代码:PHP会话变量是否已设置?,php,session,isset,Php,Session,Isset,下面是一段从单个.php文件顶部逐字复制和粘贴的代码: if (!isset($_SESSION)) { session_start(); } require_once('rb.php'); require_once('Util.php'); echo("Here is the session: "); echo(print_r($_SESSION, true)); $isDevel = $_SESSION['isDevel']; print_r("isDevel is: $isDevel\
if (!isset($_SESSION)) { session_start(); }
require_once('rb.php');
require_once('Util.php');
echo("Here is the session: ");
echo(print_r($_SESSION, true));
$isDevel = $_SESSION['isDevel'];
print_r("isDevel is: $isDevel\n");
if (! isset($_SESSION['isDevel'])) {
die("connections.php: isDevel needs to be set by now! SESSION: " .
print_r($_SESSION, true));
}
以下是执行过程中的输出:
Here is the session: Array
(
[isDevel] => This is a string.
[configObj] =>
)
isDevel is: This is a string.
connections.php: isDevel needs to be set by now! SESSION: Array ( [isDevel] => This is a string. [configObj] => )
显然$\u SESSION['isDevel']已设置,否则我将无法打印出来。但是isset
测试失败,声称$\u会话['isDevel']
没有定义,但同样地,还是打印出来了
我查过文件,但看不出我是怎么搞砸的
编辑:
JA询问将某物分配给会话的代码。这是(来自另一个文件):
Chris评论说,他认为我运行的代码与我发布的代码不同。不是真的。也许你的意思是,除了这里发布的代码,还有更多的事情在发生?如果是这样的话,那么是的,但是由于代码分布在多个文件中,我无法将其压缩得比我已有的更好
无论如何,让我明确一点:我上面发布的代码是按照您看到的顺序执行的。[虽然我看到我省略了echo(),因此第一次打印不可见--我将在预编辑问题描述中解决这一问题,以避免太多混淆;为了清晰起见,我将添加我省略的两个require_once目标,以便代码是逐字复制和粘贴的。],尽管我们可以在$\u会话数组中看到该死的isDevel,但它没有通过isset测试
我至少感到欣慰的是,人们怀疑我的行为不检点,因为这证明这个问题足够微妙,可以给出一个明显的解释:)
编辑2:
报告这件事很尴尬,但我觉得我应该感谢那些花时间帮助我的人。问题是一个复制粘贴错误——我报告的代码确实执行了。但是我引用的代码并不是负责输出“isDevel现在需要设置!”的代码,而是我错误地剪切和粘贴了该消息,然后忘记编辑文本以反映粘贴位置的语义。所以代码被执行了,但它并没有表现出我所认为的奇怪行为
很抱歉浪费了你们的集体时间。我应该更聪明地进行bug搜索。在检查会话变量之前启动会话
session_start();
if(!isset($_SESSION['isDevel'])) {
//code here
}
在检查会话变量之前启动会话
session_start();
if(!isset($_SESSION['isDevel'])) {
//code here
}
您能提供分配$u SESSION['isDevel']值的代码吗?我认为您实际运行的代码与您在此处为我们发布的代码不同。我认为您对它进行了总结,并遗漏了一个重要的细节。请尝试删除
之间的空格
和isset
。删除空间不会产生任何效果。您正在运行哪个版本的PHP?你自己造的吗?你在哪个平台上?你能提供你分配$_SESSION['isDevel']值的代码吗?我认为你实际上运行的代码与你在这里为我们发布的代码不同。我认为您对它进行了总结,并遗漏了一个重要的细节。请尝试删除之间的空格
和isset
。删除空间不会产生任何效果。您正在运行哪个版本的PHP?你自己造的吗?你在哪个平台上?我引用的第一行代码开始一个会话。但以防万一,我是按你的方式做的(如果会话已经启动,将产生警告消息。)运气不好。我引用的第一行代码启动会话。但以防万一,我是按你的方式做的(如果会话已经开始,将产生警告消息。)运气不好。