Php 无法使用类启动会话

Php 无法使用类启动会话,php,Php,我创建了一个名为login.class.php的类 <?php class Login { public $errors = array(); public $messages = array(); private $db_connection = null; private $username = ''; private $password

我创建了一个名为login.class.php的类

<?php
    class Login
    {

        public  $errors         = array();
        public  $messages       = array();

        private $db_connection  = null;
        private $username       = '';
        private $password       = '';
        private $logged_in      = false;

        public function __construct()
        {
            session_start();
            if (isset($_GET["logout"]))
            {
                $this->doLogout();
            }elseif(isset($_POST['login']))
            {
                $this->doLogin($_POST['username'],$_POST['password']);
            }
        }

        // KONEKSI KE DATABASE
        private function dbConn()
        {
            if ($this->db_connection != null)
            {
                return true;
            }else{
                try
                {
                    $this->db_connection = new PDO('mysql:host='.HOST.';dbname='.NAME.';charset=utf8', USER, PASS);
                    return true;
                }catch (PDOException $e){
                    $this->errors[] = "Terdapat kesalahan : ".$e->getMessage();
                }
            }
            return false;
        }

        // METHOD LOGIN
        public function doLogin($username, $password)
        {
            if ($this->dbConn())
            {
                $query_user = $this->db_connection->prepare('SELECT * FROM login WHERE username = ? LIMIT 1');
                $query_user->bindValue(1, $username, PDO::PARAM_INT);
                $query_user->execute();

                $hasil = $query_user->fetchObject();
            }

            if(!isset($hasil->username))
            {
                $this->errors[] = "Username tidak terdaftar";
            }elseif($hasil->password != md5($password)){
                $this->errors[] = "Password yang Anda masukkan salah";
            }else{
                $_SESSION['username'] = $hasil->username;
                $_SESSION['logged_in'] =  true;

                $this->logged_in = $_SESSION['logged_in'];
                $this->username = $hasil->username;
                $this->password = $hasil->password;
            }
        }

        public function doLogout()
        {
            $_SESSION = array();
            session_destroy();
            $this->logged_in = false;
            header('Location: index.php');
        }

        public function UserLoggedIn()
        {
            return $this->logged_in;
        }
    } ?>
    <?php

        require_once 'includes/config.php';
        require_once 'classes/login.class.php';

        $login = new Login();

        if ($login->UserLoggedIn() == true) {
            header('Location: admin.php');
        } ?>

<form action="" method="post">

<h1>Halaman Login</h1>      

<div class="login-fields">
<?php
        if(isset($login))
            {
            if($login->errors)
                        {
                            foreach($login->errors as $error) { echo"$error</p>"; }
                        }else{
                            echo'<p>Masukkan detail</p>';
                        }
                    }
                    ?> 
                    <div class="field">
                        <label for="username">Username</label>
                        <input type="text" id="username" name="username" value="" placeholder="Username" class="login username-field" required>
                    </div> <!-- /field -->

                    <div class="field">
                        <label for="password">Password:</label>
                        <input type="password" id="password" name="password" value="" placeholder="Password" class="login password-field" required>
                    </div> <!-- /password -->

                </div> <!-- /login-fields -->

                <div class="login-actions">
<button type="submit" name="login" class="button btn btn-success btn-large">Masuk</button>

</div> <!-- .actions -->
</form>
<?php
    /* Get All errors */
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    if(session_id() == '') {
        session_start();
    }
    var_dump($_SESSION['test']);
?>

然后我创建了另外两个名为login.php的页面

<?php
    class Login
    {

        public  $errors         = array();
        public  $messages       = array();

        private $db_connection  = null;
        private $username       = '';
        private $password       = '';
        private $logged_in      = false;

        public function __construct()
        {
            session_start();
            if (isset($_GET["logout"]))
            {
                $this->doLogout();
            }elseif(isset($_POST['login']))
            {
                $this->doLogin($_POST['username'],$_POST['password']);
            }
        }

        // KONEKSI KE DATABASE
        private function dbConn()
        {
            if ($this->db_connection != null)
            {
                return true;
            }else{
                try
                {
                    $this->db_connection = new PDO('mysql:host='.HOST.';dbname='.NAME.';charset=utf8', USER, PASS);
                    return true;
                }catch (PDOException $e){
                    $this->errors[] = "Terdapat kesalahan : ".$e->getMessage();
                }
            }
            return false;
        }

        // METHOD LOGIN
        public function doLogin($username, $password)
        {
            if ($this->dbConn())
            {
                $query_user = $this->db_connection->prepare('SELECT * FROM login WHERE username = ? LIMIT 1');
                $query_user->bindValue(1, $username, PDO::PARAM_INT);
                $query_user->execute();

                $hasil = $query_user->fetchObject();
            }

            if(!isset($hasil->username))
            {
                $this->errors[] = "Username tidak terdaftar";
            }elseif($hasil->password != md5($password)){
                $this->errors[] = "Password yang Anda masukkan salah";
            }else{
                $_SESSION['username'] = $hasil->username;
                $_SESSION['logged_in'] =  true;

                $this->logged_in = $_SESSION['logged_in'];
                $this->username = $hasil->username;
                $this->password = $hasil->password;
            }
        }

        public function doLogout()
        {
            $_SESSION = array();
            session_destroy();
            $this->logged_in = false;
            header('Location: index.php');
        }

        public function UserLoggedIn()
        {
            return $this->logged_in;
        }
    } ?>
    <?php

        require_once 'includes/config.php';
        require_once 'classes/login.class.php';

        $login = new Login();

        if ($login->UserLoggedIn() == true) {
            header('Location: admin.php');
        } ?>

<form action="" method="post">

<h1>Halaman Login</h1>      

<div class="login-fields">
<?php
        if(isset($login))
            {
            if($login->errors)
                        {
                            foreach($login->errors as $error) { echo"$error</p>"; }
                        }else{
                            echo'<p>Masukkan detail</p>';
                        }
                    }
                    ?> 
                    <div class="field">
                        <label for="username">Username</label>
                        <input type="text" id="username" name="username" value="" placeholder="Username" class="login username-field" required>
                    </div> <!-- /field -->

                    <div class="field">
                        <label for="password">Password:</label>
                        <input type="password" id="password" name="password" value="" placeholder="Password" class="login password-field" required>
                    </div> <!-- /password -->

                </div> <!-- /login-fields -->

                <div class="login-actions">
<button type="submit" name="login" class="button btn btn-success btn-large">Masuk</button>

</div> <!-- .actions -->
</form>
<?php
    /* Get All errors */
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    if(session_id() == '') {
        session_start();
    }
    var_dump($_SESSION['test']);
?>

哈拉曼登录
用户名
密码:
马苏克
admin.php

<?php
error_reporting(0);
require_once 'includes/config.php';
require_once 'classes/login.class.php';
$login = new Login();

if ($login->UserLoggedIn() == true) {
//PROTECTED PAGE HERE
}
?>

但是会话被保存在login.class.php中的doLogin()


很抱歉我的错误解释,我希望你知道我的意思。

也许你的问题是,$\u GET[“logout”]变量仍然设置,并且在构造函数中你的类破坏了会话。尝试取消设置所有$\u在使用后获得变量。

首先需要检查会话工作。创建twp新php文件,例如test.php、example.php

test.php

<?php 

    /* Get All errors */
    ini_set('display_errors', 'On');
    error_reporting(E_ALL);

    if(session_id() == '') {
        session_start();
    }

    $_SESSION['test'] = 'test';
?>

如果您尝试启动会话的第一行代码,它工作正常?仍然不工作。我认为我的问题是登录的_被初始化为false。然后我尝试在doLogin()中将其设置为true,但在处理admin.php页面时,它又变回false