2014-05-11 85 views
0

会话创建一个名为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; 
     } 
    } ?> 

类,然后创建另外两个页面称为的login.php

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

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

但会话已保存doLogin() in login.class.php已不存在。

对不起,我希望你明白我的意思。

+0

如果尝试启动代码会话时的第一线它工作正常吗? – Brotheryura

+0

仍然无法正常工作。 我认为我的问题在于已被初始化为false的logged_in。然后我尝试在doLogin()中设置它为true,但是当我处理admin.php页面时它变回了false – eLLiaNs

回答

0

首先你需要检查会议的工作。创建新的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'; 
?> 

使用example.php

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

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

如果不查看字符串'测试',你可以检查下一个:

1)你需要刷新浏览器缓存,删除服务器的cookie /主机,然后重新加载phpMyAdmin。

2)在php.ini文件中编辑会话的save_path和更改权限(4777):

例子:

session.save_path = "/var/lib/php/session" 
0

也许你的问题是,$ _GET [“logout”]变量仍然设置,并且在构造函数中你的类会使会话失效。尝试使用后取消所有变量。