2017-08-01 99 views
2

我想問如何把會話寫入login.php?我希望我的應用程序可以在我的應用程序中知道當前帳戶登錄。我想用session方法來實現我的登錄php。因爲稍後在用戶登錄後,用戶將鍵入其數據,數據將發送到數據庫,並且該用戶輸入的數據將僅顯示在該用戶帳戶中。 這是我的login.php如何把會話登錄php

<?php 
require_once '../includes/DbOperations.php'; 
$response = array(); 

if($_SERVER['REQUEST_METHOD']=='POST'){ 
if(isset($_POST['username']) and isset($_POST['password'])){ 
    $db = new DbOperations(); 

    if($db->userLogin($_POST['username'], $_POST['password'])){ 
     $user = $db->getUserByUsername($_POST['username']); 
     $response['error'] = false; 
     $response['id'] = $user['id']; 
     $response['email'] = $user['email']; 
     $response['username'] = $user['username']; 
    }else{ 
     $response['error'] = true; 
     $response['message'] = "Invalid username or password";   
    } 

}else{ 
    $response['error'] = true; 
    $response['message'] = "Required fields are missing"; 
} 
} 
echo json_encode($response); 

?> 

這是我DbOperations.php

<?php 

class DbOperations{ 

    private $con; 

    function __construct(){ 

     require_once dirname(__FILE__).'/DbConnect.php'; 

     $db = new DbConnect(); 

     $this->con = $db->connect(); 

    } 

    /*CRUD -> C -> CREATE */ 

    public function createUser($username, $pass, $email){ 
     if($this->isUserExist($username,$email)){ 
      return 0; 
     }else{ 
      $password = md5($pass); 
      $stmt = $this->con->prepare("INSERT INTO `users` (`id`, `username`, `password`, `email`) VALUES (NULL, ?, ?, ?);"); 
      $stmt->bind_param("sss",$username,$password,$email); 

      if($stmt->execute()){ 
       return 1; 
      }else{ 
       return 2; 
      } 
     } 
    } 

    public function userLogin($username, $pass){ 
     $password = md5($pass); 
     $stmt = $this->con->prepare("SELECT id FROM users WHERE username = ? AND password = ?"); 
     $stmt->bind_param("ss",$username,$password); 
     $stmt->execute(); 
     $stmt->store_result(); 
     return $stmt->num_rows > 0; 
    } 

    public function getUserByUsername($username){ 
     $stmt = $this->con->prepare("SELECT * FROM users WHERE username = ?"); 
     $stmt->bind_param("s",$username); 
     $stmt->execute(); 
     return $stmt->get_result()->fetch_assoc(); 
    } 


    private function isUserExist($username, $email){ 
     $stmt = $this->con->prepare("SELECT id FROM users WHERE username = ? OR email = ?"); 
     $stmt->bind_param("ss", $username, $email); 
     $stmt->execute(); 
     $stmt->store_result(); 
     return $stmt->num_rows > 0; 
    } 

} 
?> 
+0

'session_start();'和'$ _SESSION ['username'] = $ user ['username']'存儲'response'的地方。 –

回答

0

在PHP中使用會話,你首先需要與session_start()啓動會話。你應該在你想要使用會話的每個頁面上執行此操作。

session_start(); 

一旦會話開始,您可以在其中存儲變量,例如,

if($db->userLogin($_POST['username'], $_POST['password'])){ 
    $user = $db->getUserByUsername($_POST['username']); 
    $response['error'] = false; 
    $response['id'] = $user['id']; 
    $response['email'] = $user['email']; 
    $response['username'] = $user['username']; 
    $_SESSION['loggedin'] = true; 
    $_SESSION['userid'] = $user['id']; 
}else{ 
    $response['error'] = true; 
    $response['message'] = "Invalid username or password";   
} 

一旦你完成了會話並想要銷燬它,當用戶註銷時,您應該運行session_destroy()

+0

登錄後,我的應用程序會去插入數據接口,是寫入會話的方式,在插入數據接口的時候和login.php一樣嗎?因爲現在我在數據表中添加一個更多的列,其中user_id是外鍵。我的登錄表user_id是主鍵 –

+0

是的,您總是以相同的方式寫入和讀取會話。只要確保你已經調用了'session_start()',否則它將不起作用。 –