某行代码上的变量值怎么会变成假?

How can the value of a variable on a certain line of code become false?

提问人:Andy Rogers 提问时间:7/17/2020 最后编辑:Andy Rogers 更新时间:7/17/2020 访问量:64

问:

<?php
    include( 'baza.php' ); 
    session_start(); 

    if(isset($_POST['login'])){

    $login = $_POST['login'];
    $pass = md5($_POST['pass']);

    $sth = $pdo->prepare('SELECT * FROM users WHERE login = :login AND pass = :pass'); 
    $sth->bindParam(':login', $login, PDO::PARAM_STR); 
    $sth->bindParam(':pass', $pass, PDO::PARAM_STR); 

    $sth->execute(); 

    $result = $sth->fetch(); 

    if($result && isset($result['id'])) {
        $_SESSION['logged'] = true; 
        $_SESSION['userLogin'] = $result['login'];
    header('location:index.php'); 
    }
}

if(!isset($_SESSION['logged']) || $_SESSION['logged] == false) {
?>
    <form action="session.php" method="post">
    Login: <br>
    <input type="text" name="login"><br><br>
    Pass: <br>
    <input type="password" name="pass"><br><br>
    <input type="submit" value="Zaloguj">
    </form>
<?php
    die; 
}
?>

这是一个文件,用于检查用户是否被记录,如果没有,则代码将播放一个人的登录表单。该代码在第 2 行包含一个数据库连接代码(编写以防万一您想知道)。

我不明白第 55 行,严格来说,该行上的“$_SESSION['logged'] == false”部分。我的意思是,在 19 中,如果满足列出的两个条件,我们将 $_SESSION['logged'] 设置为 true,但是 $_SESSION['logged'] 怎么可能变成“false”状态(或值),通过查看或遵循此代码(从第 18 行到第 25 行)。就我使用测试PHP代码检查它而言,它可能是NULL(例如未设置或类似的东西),但是如果id没有设置为true,则通过查看此代码的工作原理,它本身无法成为“false”。通过查看此代码,我基本上不明白 $_SESSION['logged'] 如何变成“false”(在它具有/携带的值中)。它可以是“true”(由第 19 行设置)或未设置(我猜),这可能是这个 NULL 值(我认为我在测试时已经得到了它)。

像这样的事情,很抱歉打扰了,但我被困住了。在继续之前,我试图掌握它(它怎么可能是“假的”,为什么他要在他的代码中检查它)?

php-7 逻辑布尔 值表达式

评论

1赞 ADyson 7/17/2020
也许会话值在其他地方是这样设置的,例如在注销脚本或其他东西中?
1赞 ADyson 7/17/2020
当然,如果您有登录代码,则必须在其他地方(可能在同一应用程序的另一个脚本中)具有一些用于注销的代码。否则,用户如何从应用程序中注销?你真的确定代码库中不存在这样的东西吗?不要忘记会话变量在脚本之间共享。
1赞 ADyson 7/17/2020
也许他在视频的后面或系列的另一部分创建了注销代码?只是一个猜测。但你是对的,上面的代码不可能等于 .因此,要么是一个错误(然后您可以安全地删除),要么原始编写者打算将此代码与另一段代码一起使用以注销。$_SESSION['logged']false
2赞 ADyson 7/17/2020
P.S. 不管是谁写的,如果他们在网上制作教程,都应该比使用 md5 来散列密码更好。这种算法已经过时了好几年,因为它现在可以很容易地被现代硬件破解。请改用PHP现成的、现代的、受支持的密码哈希函数。
1赞 ADyson 7/21/2020
“如果您不将 $_SESSION['logged] 设置为 true,它将设置为 NULL,如果您将其作为 $_SESSION['logged] == false 运行 - 它将是一个积极的条件”......是的,这是正确的(因为PHP的松散类型,以及真实性和虚假性的概念),但是由于之前的测试,无论如何检查它是多余的。isset

答: 暂无答案