PHP会话false未设置

时间:2014-11-17 21:09:13

标签: php session

为会话设置false值时,会话已设置,但值为空。类型是布尔值。 这段代码:

<?php
    session_start();
    $_SESSION["IsMobile1"] = false;
    $_SESSION["IsMobile2"] = true;
    //header("location: ../../../index.php");
    echo "IsSet1: " . isset($_SESSION["IsMobile1"]) . "; IsMobile1: " . $_SESSION["IsMobile1"] . "; type: " . gettype($_SESSION["IsMobile1"]) . ";<br>";
    echo "IsSet2: " . isset($_SESSION["IsMobile2"]) . "; IsMobile2: " . $_SESSION["IsMobile2"] . ";<br>";
?>

打印出来:

IsSet1: 1; IsMobile1: ; type: boolean;
IsSet2: 1; IsMobile2: 1;

我的PHP版本是5.5.13。 这是预期的行为吗?我试图用代码阅读会话:

if (isset($_SESSION["IsMobile"]))
    {
        if (is_bool($_SESSION["IsMobile"]))
        {
            header("location: Mobile/");
            exit;
        }
    }

但当然它不起作用,因为IsMobile是空布尔值。 (原来我只使用IsMobile.IsMobile1和IsMobile2仅用于测试)。

3 个答案:

答案 0 :(得分:3)

我自己多次面对这个问题,虽然还未经证实,但我得出了这样的结论:

由于boolean类型不能用作1或0的常量,因此只会在打印或任何其他输出尝试时将其强制转换为int。但它只发生在TRUEFALSE始终(或至少在大多数情况下)保持空白(我从未见过bool var输出FALSE)。

但好消息是,如果你在FALSE语句中使用定义为if的变量,它将被解释为FALSE(如预期的那样)。

那么,如果你想输出它们该怎么办?

输出字符串:

if ($_SESSION["IsMobile"] == FALSE) {
    echo "FALSE";
}

更新哦,是的,这是我在文档中遗漏的内容:

  

布尔值TRUE值转换为字符串&#34; 1&#34;。布尔值为FALSE   转换为&#34;&#34; (空字符串)。这允许转换回来   在布尔值和字符串值之间。

The source

答案 1 :(得分:0)

如下:

if (!empty($_SESSION["IsMobile"]))
{
  header("location: Mobile/");
  exit;
}

答案 2 :(得分:0)

尝试使用严格的运算符

$_SESSION['IsMobile'] === TRUE