未设置PHP会话false
将false值设置为session时,会设置会话,但该值为空。类型为布尔型。 此代码:未设置PHP会话false,php,session,Php,Session,将false值设置为session时,会设置会话,但该值为空。类型为布尔型。 此代码: <?php session_start(); $_SESSION["IsMobile1"] = false; $_SESSION["IsMobile2"] = true; //header("location: ../../../index.php"); echo "IsSet1: " . isset($_SESSION["IsMobile1"]) . "; Is
<?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>";
?>
我的PHP版本是5.5.13。
这是预期的行为吗?我正在尝试使用以下代码阅读会话:
if (isset($_SESSION["IsMobile"]))
{
if (is_bool($_SESSION["IsMobile"]))
{
header("location: Mobile/");
exit;
}
}
但它当然不起作用,因为IsMobile是空布尔值。(在原版中,我只使用IsMobile。IsMobile1和IsMobile2只是为了测试。)类似于:
if (!empty($_SESSION["IsMobile"]))
{
header("location: Mobile/");
exit;
}
尝试使用严格运算符
$_SESSION['IsMobile'] === TRUE
我本人曾多次面对这一问题,虽然尚未得到证实,但我得出了以下结论: 由于
boolean
类型不能用作1或0的常量,因此它只是在打印或任何其他输出尝试时转换为int
。但这只发生在真的
上FALSE
始终(或至少在大多数情况下)保持为空(我从未见过bool
var输出FALSE
)
但好消息是,如果在if
语句中使用定义为FALSE
的变量,它将被解释为FALSE
(如预期的那样)
那么,如果要输出它们,该怎么办
输出字符串:
if ($_SESSION["IsMobile"] == FALSE) {
echo "FALSE";
}
更新哦,是的,以下是我在文档中遗漏的内容:
布尔真值转换为字符串“1”。布尔值为FALSE
已转换为“”(空字符串)。这允许来回转换
在布尔值和字符串值之间
is\u bool
告诉您正在处理一个布尔值。它不检查该变量是真是假。你不能呼出false
这在PHP中是什么都不是,就像nullTrue一样。我的意思是filter\u var不是布尔值,filter\u var(“”,filter\u VALIDATE\u BOOLEAN);返回false,这是预期行为。From:btwisset()
如果数组索引存在并设置了值,但值为null,则返回false。或者,如果只想检查密钥是否存在,可以使用array\u key\u exists()
。如果此代码在某些情况下可能在根本不存在$\u会话变量的情况下运行,则可以在调用array\u key\u exists()
之前通过检查isset($\u SESSION)
将两者结合起来。这并不是说代码错误,而是想指出它实际上并没有检查会话变量是否设置为false,但是检查它是否是错误的,因为只使用了=
而不是==
。我想知道PHP会话是否能够在整个会话中将数据保持为bool类型,或者在某个时候它是否会转换为字符串。
if ($_SESSION["IsMobile"] == FALSE) {
echo "FALSE";
}