5

問題の核心をできるだけ簡潔にまとめました。

簡単なスクリプト:

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

「ログに記録された」を出力します。

変数型の変更は表面的なものにすぎないようです。何が間違っているのかわかりません。型のチェックを含めるために===比較を使用する必要がありますか?

4

2 に答える 2

3

まさに、厳密な比較を行う必要があります ===

これは、PHP が文字列を数値に変換しようとするため、「ログに記録された」パスが 0 になるためです。

そして 0 == 0

  • (整数) 「記録された」= 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 に答える