PHP会话错误未设置

马克拉

为会话设置错误值时,将设置会话,但该值为空。类型是布尔值。这段代码:

<?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仅用于测试)。

亚历克斯·卡辛(Alex Karshin)

我本人已经多次面对这个问题,尽管仍未得到证实,但我得出了这样的结论:

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

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

那么,如果要输出它们怎么办?

输出字符串:

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

更新哦,是的,这是我在文档中错过的内容:

布尔TRUE值将转换为字符串“ 1”。布尔值FALSE将转换为“”(空字符串)。这允许在布尔值和字符串值之间来回转换。

来源

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章