登录系统没有';Don’别认出我是';已登录';


Log in system doesn't recognize me as 'logged in'

我正忙于登录系统,当我想测试它时,我注册了。奏效了。我的登录详细信息被插入数据库,就像一个魅力。然后,register()函数将我的详细信息传递给login()函数,后者将我登录,并将我重定向到索引页。

这部分都有效,但当我想通过检查是否设置了$_SESSION变量来检查我是否真的登录时,但它并没有显示它是。

这是预成型登录的功能:

public function login()
    {
        $postusername = $_POST['username'];
        $postpassword = $_POST['passwordp'];
        $this->errors = array();
        $query = $this->db->conn->prepare('SELECT naam, pass, email FROM ht_users WHERE naam = ?');
        $query->bind_param('s', $postusername);
        $query->execute();
        $query->bind_result($username, $password, $email);
        $query->store_result();
        if ($query->num_rows > 0)
        {
            while ($query->fetch()) 
            {
                if (password_verify($postpassword, $password))
                {
                    //$sessionid = $this->newSession($username);
                    session_start();
                    $_SESSION['user'] = array(
                        'username' => $username,
                        'email' => $email
                    );
                    header('Location: index.php');
                    exit();
                } 
                    else 
                {
                    $this->errors[] = 'Invalid Password';
                }
            }
        }
            else
        {
            $this->errors[] = 'Username/email not found NIGGUH';
        }
        return $this->errors;
        exit();
        $query->close();
    }

正如你所看到的;登录成功后,它会启动一个会话,设置$_SESSION变量,然后将我重定向到index.php。为了准备一个简单的"我登录了吗"检查,我使用了菜单:

                    <?php
                    if (!isset($_SESSION['user']))
                    {
                        ?><ul class="submenu-holder">
                                <li><a href="login.php">Inloggen</a></li>
                                <li><a href="register.php">Registreren</a></li>
                                <li><a href="#">Gebruikerslijst</a></li>
                                <li><a href="#">Alle badges</a></li>
                                <li><a href="#">Forum</a></li>
                                <li><a href="#">Wachtwoord vergeten</a></li>
                            </ul>
                    <?php
                    }
                        else
                    {
                    ?><ul class="submenu-holder">
                                <li>INGELOGD</li>
                            </ul>
                    <?php
                        }
                    ?>

但它总是显示正常的菜单,应该在用户没有登录时显示

我提出这个问题的目的:

  • 我有没有犯任何可能导致这个问题的错误
  • 代码是否正确,如果不正确,如何改进

谢谢,

卫斯理。

session_start()需要位于BOTH文件的开头,然后才是任何其他代码。

您必须使用$_SESSION变量在wehre中的每个文件中写入session_start();

我建议您使用$_SESSION变量将session_start();放在每个文件的第一行(您不必将其放在第一行,而是在使用之前!)。

如果你的菜单在index.php中,那么它看起来像这样:

<?php
    session_start();
    if (!isset($_SESSION['user'])) {
    ?>
        <ul class="submenu-holder">
            <li><a href="login.php">Inloggen</a></li>
            <li><a href="register.php">Registreren</a></li>
            <li><a href="#">Gebruikerslijst</a></li>
            <li><a href="#">Alle badges</a></li>
            <li><a href="#">Forum</a></li>
            <li><a href="#">Wachtwoord vergeten</a></li>
        </ul>
    <?php
    } else {
    ?>
        <ul class="submenu-holder">
            <li>INGELOGD</li>
        </ul>
    <?php
    }
?>