【发布时间】:2015-01-14 21:58:09
【问题描述】:
给session设置false值时,设置了session,但值为空。类型是布尔值。 这段代码:
<?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 仅用于测试)。
【问题讨论】:
-
is_bool告诉你你正在处理一个布尔值。它不检查该变量是真还是假。 -
U can't echo out
falseit's just nothing in PHP, as with null -
是的。我的意思是 filter_var 不是 is_bool 和 filter_var('', FILTER_VALIDATE_BOOLEAN);返回 false 这是预期的行为。来自:stackoverflow.com/questions/7336861/…
-
btw
isset()如果数组索引存在并且设置了值,则返回 false,但该值为 null。或者,如果您只想检查密钥是否存在,您可以使用array_key_exists()。如果在某些情况下此代码可能在没有 $_SESSION 变量的情况下运行,您可以通过在调用array_key_exists()之前检查isset($_SESSION)将两者结合起来。