【问题标题】:PHP session var both is and is not set?PHP session var 是否已设置?
【发布时间】: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?你自己建的吗?你在哪个平台上?

标签: php session isset


【解决方案1】:

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

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

【讨论】:

  • 我引用的第一行代码启动了一个会话。但以防万一,我按照你的方式做了(如果会话已经开始,这将导致警告消息。)不走运。
猜你喜欢
  • 1970-01-01
  • 2010-10-05
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 2013-10-24
  • 2019-04-05
  • 2013-08-25
相关资源
最近更新 更多