登录系统无法识别我已登录'

时间:2014-11-02 15:46:10

标签: php session

我忙于登录系统,当我想测试它时,我注册了。那很有效。我的登录详细信息插入到数据库中,就像一个魅力。然后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。要预先形成一个简单的“我登录后”#39;检查,我用菜单:

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

但它始终显示正常菜单,该菜单应在用户未登录时显示。

通过提出这个问题我的目标:

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

谢谢,

韦斯利。

2 个答案:

答案 0 :(得分:1)

在任何其他代码之前,session_start()必须位于BOTINNING BOTH文件中。

答案 1 :(得分:0)

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

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

如果您的菜单位于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
    }
?>