5

我已经将问题的症结总结得尽可能简短:

一个简单的脚本:

<?php
session_start();

$_SESSION['user']="logged";

然后覆盖

$_SESSION['user']=0;  

并显示 $_SESSION 内容

var_dump($_SESSION);

显示 $_SESSION['user'] is '0' - 当然因为它刚刚被覆盖

但是现在看

if ($_SESSION['user']=="logged"){
    echo "logged";
}
else{
    echo "unlogged";
}

输出“记录”....

似乎变量类型的变化只是肤浅的 - 我不知道我做错了什么..我需要使用 === 比较来包括检查类型吗?

4

2 回答 2

3

确实,你需要做严格的比较===

那是因为 PHP 尝试将您的字符串转换为数字,因此“记录”传递为 0

然后 0 == 0

  • (int)“记录”= 0
  • (int) "1logged" = 1
  • (int) "logged1" = 0

http://www.php.net/manual/en/language.types.type-juggling.php

于 2012-09-11T07:15:37.577 回答
0

这是正常的,因为:

(int)"logged" = 0

所以0 = 0

你需要做严格的比较

if ($_SESSION['user'] === "logged")
于 2012-09-11T07:16:10.400 回答