1

这是一小段代码,从单个 .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 现在需要设置!”的代码。相反,我错误地剪切并粘贴了该消息,然后忘记编辑文本以反映我将其粘贴到的语义。所以代码正在执行,但它没有表现出我归因于它的奇怪行为。

很抱歉浪费了你们的集体时间。我应该对这个错误搜索更聪明。

4

1 回答 1

1

在检查会话变量之前启动会话。

session_start();
if(!isset($_SESSION['isDevel'])) {
//code here
}
于 2012-05-30T20:53:22.743 回答