2014-11-17 3 views
1

При установке ложного значения в сеанс сеанс устанавливается, но значение пуст. Тип является логическим. Этот код:PHP session false not set

<?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

'is_bool' говорит вам, что вы имеете дело с булевым. Он не проверяет, соответствует ли эта переменная true или false. – andrewsi

+2

U не может выбраться из 'false', это просто ничего в PHP, как и в случае с нулевым – DarkBee

+0

True. Я имел в виду filter_var, а не is_bool и filter_var ('', FILTER_VALIDATE_BOOLEAN); return false, ожидаемое поведение. От: http://stackoverflow.com/questions/7336861/how-to-convert-string-to-boolean-php – Makla

ответ

3

я столкнулся этот вопрос себя много раз и, в то же время неподтвержденными, я пришел к такому выводу:

Поскольку тип boolean не может использоваться как постоянный для 1 или 0, это происходит просто так, что оно отливается до int при печати или y другая попытка выхода. Но это происходит только с TRUE. FALSE всегда (или, по крайней мере, в большинстве случаев) остается пустым (я никогда не видел bool var output FALSE).

Но хорошие новости, если вы используете переменную, определенную в качестве FALSE в if заявление, оно будет интерпретировано как FALSE (как и ожидалось).

Итак, что делать, если вы хотите вывести их?

Выходные строки:

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

UPDATE Ах да, вот что я пропустил в документации:

Логическое истинное значение преобразуется в строку "1". Boolean FALSE: преобразован в "" (пустая строка). Это позволяет преобразовать обратно и между булевыми и строковыми значениями.

The source

0

Как о чем-то вроде:

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

Try с помощью строгого оператора

$_SESSION['IsMobile'] === TRUE