我总结了问题的关键是尽可能简短:
一个简单的脚本:
<?php
session_start();
$_SESSION['user']="logged";
然后覆盖
$_SESSION['user']=0;
并显示$ _SESSION内容
var_dump($_SESSION);
显示$ _SESSION ['user']为'0' - 确定,因为它刚刚被覆盖
但现在观看
if ($_SESSION['user']=="logged"){
echo "logged";
}
else{
echo "unlogged";
}
输出“已记录”....
似乎变量类型的变化只是肤浅的 - 我不知道我做错了什么.. 我是否需要使用===比较来检查类型?
答案 0 :(得分:3)
确切地说,你需要进行严格的比较===
这是因为PHP尝试将您的字符串转换为数字,因此“已记录”传递为0
然后0 == 0
http://www.php.net/manual/en/language.types.type-juggling.php
答案 1 :(得分:0)
这是正常的,因为:
(int)"logged" = 0
所以0 = 0
你需要做严格的比较
if ($_SESSION['user'] === "logged")