覆盖$ _SESSION变量类型时的奇怪问题

时间:2012-09-11 07:10:56

标签: php session overwrite

我总结了问题的关键是尽可能简短:

一个简单的脚本:

<?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";
}

输出“已记录”....

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

2 个答案:

答案 0 :(得分:3)

确切地说,你需要进行严格的比较===

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

然后0 == 0

  • (int)“logged”= 0
  • (int)“1logged”= 1
  • (int)“logged1”= 0

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

答案 1 :(得分:0)

这是正常的,因为:

(int)"logged" = 0

所以0 = 0

你需要做严格的比较

if ($_SESSION['user'] === "logged")