PHP会话var都是并没有设置?

问题描述:

这里的代码,复制一小片,并从单一的PHP文件的顶部逐字粘贴:PHP会话var都是并没有设置?

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; 

克里斯评论说,他不认为我跑我张贴相同的代码。不对。虽然也许你的意思是说,还有更多的事情不只是在这里发布的代码?如果是这样,那么是的,但由于代码分散在多个文件中,所以我无法比现有更好地压缩它。

无论如何,让我明确一点:我上面发布的代码按照您看到的顺序执行,就像您看到的一样。 [虽然我看到我遗漏了一个echo(),因此第一个print_r不可见 - 我将在预编辑问题描述中解决该问题,以避免太多混淆;我会添加两个require_once目标,为了清晰起见,我忽略了这些目标,以便代码是逐字拷贝和粘贴。]因此,不管怎样,尽管我们可以看到该$ _SESSION数组中的damn isDevel,但它失败了isset测试。

我至少欣慰的是,人们怀疑我的犯规动作,因为它证明了这个问题是很微妙的,足以别雷的明显的解释:)

编辑2:

这是令人尴尬报告这一点,但我觉得我欠那些花时间试图帮助我的人。这个问题是一个复制和粘贴错误 - 我报告的代码确实被执行了。但我引用的代码不是负责输出的代码,“isDevel需要立即设置!”相反,我错误地剪切并粘贴了那个msg,然后忘记编辑文本以反映我粘贴到的位置的语义。所以代码被执行了,但它并没有表现出我所说的怪异行为。

对不起,浪费你的集体时间。我应该更聪明地了解这个错误搜索。

+1

你能提供代码,你分配$ _SESSION ['isDevel']的值吗? –

+0

我不认为你实际上运行了你为我们发布的相同代码。我认为你总结了一下,并且忽略了一个重要的细节。 – goat

+0

尝试删除'!'和'isset'之间的空格。 –

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

session_start(); 
if(!isset($_SESSION['isDevel'])) { 
//code here 
} 
+0

我引用的代码的第一行开始会话。但为了以防万一,我按照自己的方式做了这些(在会话已经开始的情况下会导致警告消息)。没有运气。 – shanusmagnus