2011-06-09 38 views
0

我想知道如何讓用戶登錄,然後檢查他的Cookie,如果他們可以繼續或不,Cookie有他的用戶ID和加密的密碼。有沒有辦法檢查每個頁面?每次都不使用mysql?檢查用戶登錄和最小化數據庫查詢的最佳方法是什麼?

謝謝。

編輯:會話中使用

+4

您不想將密碼存儲在cookie中,是否加密。 – 2011-06-09 09:00:42

+0

您不需要使用MySQL檢查會話值。會話值只能由您的代碼設置。它們存儲在服務器上,並且僅由cookie識別*(會話ID)。用戶無法篡改會話值。 – 2011-06-09 09:37:01

回答

1
  1. 首先獲取用戶名密碼,驗證它什麼。
  2. 檢查數據庫中是否存在用戶名和密碼。
  3. 如果用戶名/密碼是有效的,那麼存儲在會話中的一個標誌
  4. 檢查標誌真正的每一個新的頁面

代碼放在這裏......

// start the session // 
session_start(); 

// create one flag // 
$_SESSION['logged'] = FALSE; 

// username, password from form submit // 
$username = $_POST['username']; 
$password = sha1($_POST['password']); 

// check once in database // 
$con = new mysqli('localhost', 'my_username', 'my_password', 'my_database'); 
$sql = "SELECT * FROM `tbl_users` AS `u` WHERE `u`.`username` = ? AND `u`.`password` = ?"; 
$result = $con->query($sql, array($username, $password)); 

// if user existed return one row // 
if($result->num_rows() == 1) { 
    $_SESSION['logged'] = TRUE; 
    $_SESSION['username'] = $username; 
} else { 
    echo "invalid username or password!!"; 
} 

對於其他所有新頁面選中此項

if(isset($_SESSION['logged']) == TRUE) { 
    echo 'You are logged' . $_SESSION['username']; 
} else { 
    header('location:login_form.php'); 
} 
+0

您僅檢查會話變量是否已設置。如果變量包含FALSE,它將被接受爲登錄。 – martinstoeckli 2011-06-09 10:59:47

3

爲什麼不使用PHP sessions

+0

我實際上使用會話,主要問題是使用mysql檢查值 – 2011-06-09 09:18:36

0

您應該使用會話。 Session對此非常有效。只需將值放在會話中,然後在每個頁面上開始會話並檢查會話。如果用戶有會話,然後繼續,否則將他發送到登錄頁面

+0

實際上使用會話,主要問題是使用mysql檢查值... – 2011-06-09 09:18:45

+1

@Ronan Dejhero。親愛的,我想你在哪裏錯了。當我們談論會話時,在我們驗證用戶的登錄過程中,我們只將會話中的值放入一次。然後,我們只是檢查我們是否有會話。我們不必再次查詢表格。 – 2011-06-09 09:20:57

相關問題