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