为会话设置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仅用于测试)。
答案 0 :(得分:3)
我自己多次面对这个问题,虽然还未经证实,但我得出了这样的结论:
由于boolean
类型不能用作1或0的常量,因此只会在打印或任何其他输出尝试时将其强制转换为int
。但它只发生在TRUE
。 FALSE
始终(或至少在大多数情况下)保持空白(我从未见过bool
var输出FALSE
)。
但好消息是,如果你在FALSE
语句中使用定义为if
的变量,它将被解释为FALSE
(如预期的那样)。
那么,如果你想输出它们该怎么办?
输出字符串:
if ($_SESSION["IsMobile"] == FALSE) {
echo "FALSE";
}
更新哦,是的,这是我在文档中遗漏的内容:
布尔值TRUE值转换为字符串&#34; 1&#34;。布尔值为FALSE 转换为&#34;&#34; (空字符串)。这允许转换回来 在布尔值和字符串值之间。
答案 1 :(得分:0)
如下:
if (!empty($_SESSION["IsMobile"]))
{
header("location: Mobile/");
exit;
}
答案 2 :(得分:0)
尝试使用严格的运算符
$_SESSION['IsMobile'] === TRUE