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

时间:2015-07-23 07:45:57

标签: php arrays session

我是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>

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

//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);
        }

以下是负责将$ _SESSION ['logged']更改为TRUE的User类的方法。我在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;
    }  

1 个答案:

答案 0 :(得分:0)

您在$_SESSION['logged'] = FALSE的第三行设置了index.php。无论User的登录状态如何,此行都会将logged的值设置为false,从而导致后续的User::isLoggedIn()条件失败。

删除该行。