Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 登录系统不';我认不出我是';登录';_Php_Session - Fatal编程技术网

Php 登录系统不';我认不出我是';登录';

Php 登录系统不';我认不出我是';登录';,php,session,Php,Session,我正忙于登录系统,当我想测试它时,我注册了。成功了。我的登录详细信息被插入数据库,就像一个符咒。然后,register()函数将我的详细信息传递给login()函数,该函数将我登录,并将我重定向到索引页 这部分都可以工作,但是当我想通过检查$\u SESSION变量是否设置来检查我是否真正登录时,它没有显示是否设置了 这是执行登录的功能: public function login() { $postusername = $_POST['username'];

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

这部分都可以工作,但是当我想通过检查
$\u 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();
    }
如你所见;登录成功后,它会启动一个会话,设置
$\u 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
                        }
                    ?>
  • 英格洛德
但它总是显示正常菜单,应该在用户未登录时显示

我的目标是问这个问题:

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


Wesley。

会话开始()需要在两个文件的开头,在任何其他代码之前。

您必须编写
会话开始()$\u SESSION
变量

我建议您将
session_start()$\u SESSION
变量,在每个文件的第一行添加code>(您不必将它放在第一行,但在使用它之前!)

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

  • 英格洛德

您必须在下一个文件中再次启动会话!因此,index.php文件中的第一行应该是:session_start();您是否也在
index.php
页面上启动了会话?您需要
session_start()在两页的开头。从技术上讲,它只需要在任何输出之前。