为什么当$_SESSION更改为TRUE时不调用我的数组数组?


Why is my array of arrays not being called when the $_SESSION is changed to TRUE?

我是PHP新手,我不明白为什么我的代码不按预期工作。我在类控制器上有两个函数,其中一个应该在用户注销时调用,另一个应该在用户登录时调用。但是发生的是函数从来没有被调用,我不知道为什么。

只有用户注销功能正在被调用。
//index.php
    <!DOCTYPE html>
    <?php
        require_once 'Control/Controller.php';
        session_start();
        $_SESSION['logged'] = FALSE;
    ?>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
        </head>
        <body>
            <div id="mid">
                <div id="left">
                    <?php
                    if (User::isLogged())
                    {
                        $menu = Controller::initMenuUser();
                    }
                    else
                    {
                        $menu = Controller::initMenuGuest();
                    }
                    if (!empty($menu))
                    {
                        foreach ($menu as $item) 
                        {
                            echo '<li><a href="' . $item['url'] . '">' . $item['text'] . '</a>';
                        }
                    }
                </div>
            </div>
        </body>
    </html>

应该发生的是,在div id="left"上,应该有一组不同的链接和名称,这取决于用户是否登录。

//Controller.php
     ...
     public static function initMenuGuest() 
        {
            $menu = array(
                array(
                    'url' => 'index.php?page=Login',
                    'text' => 'Login'
                ),
                array(
                    'url' => 'index.php?page=Register',
                    'text' => 'Register'
                )
            );
            return $menu;
        }
        public static function initMenuUser() 
        {
            $menu = array(
                array(
                    'url' => 'index.php?page=Profile',
                    'text' => 'Profile'
                ),
                array(
                    'url' => 'index.php?page=Cart',
                    'text' => 'Cart'
                ),
                array(
                    'url' => 'index.php?logout=true',
                    'text' => 'Logout'
                ),
                array(
                    'url' => 'index.php?page=Administration',
                    'text' => 'Administration'
                )
            );
            return($menu);
        }

这是User类负责将$_SESSION['logged']更改为TRUE的方法。我在controller。php中调用这个函数。if (isset($_POST['login']))则调用该函数。$_POST['login']是index.php上的一个表单

    //User.php
     public static function login()
        {
            $login = $_POST['loginl'];
            $password = $_POST['passwordl'];
            $u = new User($login);
            $res = $u ->check();
            $udb = $res->fetch_object();
            if (password_verify($password, $udb->password))
            {
                $_SESSION['user'] = $udb->login;
                $_SESSION['id'] = $udb->id;
                $_SESSION['logged'] = TRUE;
                $msg = 'Welcome '.$_SESSION['user'].' '.$_SESSION['logged'];
            }
            else
            {
                $msg = "Wrong Login information.";
            }      
            $res->free();
            return $msg;
        }
    public static function isLogged()
    {
        if ($_SESSION['logged'] == TRUE)
        {
            $res = TRUE;
        }
        else 
        {
            $res = FALSE;
        }
        return $res;
    }  

您在index.php的第三行设置$_SESSION['logged'] = FALSE。无论User的登录状态如何,这一行都将logged的值设置为false,从而不满足后面的User::isLoggedIn()条件。