【发布时间】:2012-06-05 12:13:00
【问题描述】:
这是一小段代码,从单个 .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\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] => )
显然 $_SESSION['isDevel'] 已设置,否则我将无法将其打印出来。但是isset 测试失败,声称$_SESSION['isDevel'] 没有定义,但同时打印出来!
我查看了文档,但看不出我是怎么搞砸的。
编辑:
J A 询问分配给会话的代码。是这个(来自另一个文件):
if (!isset($_SESSION)) { session_start(); }
$isDevel = 'This is a string.';
$_SESSION['isDevel'] = $isDevel;
Chris 认为他认为我运行的代码与我发布的代码不同。不对。虽然也许您的意思是除了这里发布的代码之外还有更多的事情发生?如果是这样,那么是的,但是由于代码分布在多个文件中,因此我无法将其压缩得比现有的更好。
无论如何,让我明确一点:我在上面发布的代码正在执行,就像你看到的那样,按照你看到的顺序。 [虽然我看到我遗漏了一个 echo() 以使第一个 print_r 不可见——我将在预编辑问题描述中修复它,以避免太多混乱;为了清楚起见,我将添加两个我省略的 require_once 目标,以便代码是逐字复制和粘贴的。] 所以不知何故,即使我们可以看到 $_SESSION 数组中该死的 isDevel ,它没有通过 isset 测试。
至少我很高兴人们怀疑我犯规,因为这证明了这个问题非常微妙,足以掩盖一个明显的解释:)
编辑 2:
报告这件事很尴尬,但我觉得我应该感谢那些花时间帮助我的人。问题是复制和粘贴错误——我报告的代码确实被执行了。但我引用的代码不是负责输出“isDevel 现在需要设置!”的代码。相反,我错误地剪切并粘贴了该消息,然后忘记编辑文本以反映我将其粘贴到的语义。所以代码正在执行,但它并没有表现出我归因于它的奇怪行为。
很抱歉浪费了你们的集体时间。我应该对这个错误搜索更聪明。
【问题讨论】:
-
您能否提供您分配 $_SESSION['isDevel'] 值的代码?
-
我认为您实际上运行的代码与您在此处为我们发布的代码不同。我认为你总结了它,并遗漏了一个重要的细节。
-
尝试删除
!和isset之间的空格。 -
删除空间没有任何作用。
-
你运行的是什么版本的 PHP?你自己建的吗?你在哪个平台上?