2016-02-26 135 views
2

我使用會話在我的網站上登錄用戶。 問題是,我想讓用戶輸入密碼remember,所以在關閉/打開瀏覽器後他們不需要再次登錄。用會話php創建cookie?

我需要在會話中使用cookie嗎?

我的代碼:

$user = $_POST['user']; 
$pass = $_POST['pass']; 

$stmt = $mysqli->prepare("SELECT id, user, pass FROM users WHERE user = ?"); 
$stmt->bind_param('s', $user); 
$stmt->execute(); 
$stmt->bind_result($id, $user, $pass2); 
$stmt->fetch(); 
$stmt->close(); 

if (password_verify($pass, $pass2)) { 

    session_start(); 
    $_SESSION["user"] = $user; 

    setcookie("user", $user, time()+3600000); // set the cookie and next? 


} 

所以我設置cookie,然後?下次如何登錄用戶?我應該檢查會話['用戶']是空的,他們session = cookie value

回答

2

默認情況下,當我們設置會話數據時,會話cookie將保存在客戶端的瀏覽器中。因此,如果您想讓用戶在關閉瀏覽器後保持登錄狀態,也許您可​​以考慮使用php.ini session.cookie_lifetime指令以秒爲單位指定會話cookie的生存期。您也可以使用session_set_cookie_params函數。它提供$lifetime參數來設置cookie的生存期。

例如,要保持會話cookie永遠:

<?php 

session_set_cookie_params(0); 
session_start(); 
+0

這很好,但它會在關閉/打開瀏覽器後記住用戶嗎?我會嘗試!謝謝 –

1

在這種情況下,基本的思路是用戶登錄過程中會產生一些隨機哈希值,並將其保存在用戶表中登錄的用戶,並在同一時間,名稱login_hash創建的cookie所產生has和下一個時間值設定在用戶登錄檢查,如果login_hash存在並且它與db中的某個用戶匹配,然後與該用戶一起登錄。

+0

哦,我看到了!所以我會在這個cookie中創建一個登錄'hash id',並將這個id保存在mysql中,如果cookie id與某個用戶id hash = login再次匹配後。謝謝! –

+1

是的,這是一個基本的例子,但有比賽更難和更安全的方式,你可以在這裏檢查:http://stackoverflow.com/questions/244882/what-is-the-best-way-to-implement-remember-me- for-a-website查看更多詳情 – Armen