0

我正在处理的项目有问题。我正在尝试使用 PHP + Sessions 编写一个简单的登录系统。但是我失去了我的会话,我真的不知道为什么,代码:

索引.php

<?php
session_start();

if(!isset($_SESSION['logedin'] == True)){
    <form action = "login.php" method = "post" id="login-form" class = "login-form">
        <input type = "text" name = "username" maxlength = "100"/>
        <input type = "password" maxlength = "50" name = "password"/>

        <button type="submit">Sign in</button>
    </form>
}else{
   echo "Loged in.";
}
?>

登录.php

<?php
    session_start();

    $username = $_POST['username'];
    $password = $_POST['password'];

    if(!isset($_SESSION['logedin'] == True)){
        if($username == 'username' && $password == 'password'){
                    $_SESSION['logedin'] = True;
                    header("index.php"); // Loged in
        }
    }
?>

真正的代码不是这个,因为放在这里太长了,但这是一个关于代码的简单简历......我迷失了,因为如果我打开一个会话到 index.php,它可以工作,但是如果我离开我的页面(在这种情况下,通过表单登录.php),当我回到索引时,会话就消失了......

我得说我不使用任何框架或其他东西,它是一种简单的形式,全部使用 PHP 完成。

4

1 回答 1

2

您在第一行的括号将是一个问题:

if(!isset($_SESSION['logedin'] == True)){

改成:

if(!isset($_SESSION['logedin'])) {

你为什么在这种情况下做双重否定?与其做!isset == true,不如做isset == false。这可能会给您的代码添加混乱,并且您的代码越直观(和简单)越好。

在您的 login.php 中,您也有该行:

if(!isset($_SESSION['logedin'] == True)){

你基本上是在说isset(true) == falsewhich 应该总是返回 false。因为$_SESSION['logedin'] == true是真的。if (isset($_SESSION['logedin']))如果您已登录,请将其更改为 true。

让我们进一步分解这个条件,看看你在做什么

if (false == isset(
 $_SESSION['loged'] == true  // will be true if you're logged in
 )  // isset will return true, but you're expecting a false
)

你的 isset 总是会返回 true。$_SESSION['logedin'] == true 是否返回 true 或 false 它将是“isset”。只有返回值为 null 或 var 不存在时,Isset 才会返回 false。“False”是一个值并且存在。那有意义吗?对不起,如果这令人困惑。基本上,不要在你的 isset 中使用条件!:)。使用 isset 作为条件的一部分,但不要将它们传递给 isset 参数。

于 2013-03-31T20:27:59.397 回答