2012-03-11 70 views
1

我是新來的餅乾和(實際上一般的PHP),我想爲我正在工作的網站實現「記住我」系統。在閱讀了很多帖子和其他網站之後,我知道我不應該在cookie中輸入用戶的密碼或任何其他信息。一種解決方案是在數據庫表中使用remember_key,每次用戶使用「記住我」複選框進行登錄時都會重新生成該複選框。當用戶再次訪問該頁面時,代碼應該從db中選擇remember_key,並檢查​​是否與remember_key相同,如果它是用戶登錄的。但我不確定如何實現此操作。我以我認爲我應該的方式編寫了一些代碼,但我可以使用一些幫助來查看我已有的是否正確以及如何繼續。這是我現在有:(?或者它的價值)記住並驗證用戶使用Cookie

function rememberUser($id) { 

    $remember = md5(uniqid(mt_rand(),true)); 
    $stmt = $mysqli->prepare("UPDATE USERS SET USER_REMEMBER_KEY = ? WHERE USER_ID = ?"); 
    $stmt->bind_param('si', $remember, $id); 
    $stmt->execute(); 
    setcookie("remember", $remember, time()+60*60*24*30, "/", "www.someName.com", false, true); 
} 

function isValidUser($id) { 

    $stmt = $mysqli->prepare("SELECT * FROM USERS WHERE USER_REMEMBER_KEY = ? AND USER_ID = ?"); 
    $stmt->bind_param('si', $_COOKIE['remember'], $id); 
    $stmt->execute(); 

    $stmt->store_result(); 
    $count = $stmt->num_rows; 

    if($count == 1) { 
     return true; 
    } 
    else { 
     return false; 
    } 
} 

function forgetUser($id) { // not sure about this method at all! 

    setcookie("remember", '', time()-3600, "/", "www.someName.com", false, true); 

} 

forgetUser()將刪除​​,但它是如何知道它是特定人的餅乾嗎?我想對我現在的代碼提出任何意見/建議/提示/提示或其他任何內容,以及我如何改進它。

爲了您的信息我已經知道會話,他們很容易使用和更安全(我猜),但我需要保持用戶登錄更長的時間(如FB)和會話不夠好那。我也聽說長時間的會話不會保證刪除。

關於安全性:我的網站不需要超級超級安全,我想這個令牌就足夠了嗎?

+0

小艾深思熟慮。請記住,您也可以使用PHP會話[PHP](http://www.php.net/manual/en/function.session-start.php),它還存儲會話唯一的散列。 – Bradmage 2012-03-11 15:54:49

+0

但我已經解釋過會話不會保留足夠長的時間:) – Loolooii 2012-03-11 16:01:19

+0

我只是在看底部的文本,並不確定你是否剛剛添加它,或者我是因爲我很掙扎保持我的眼睛開放:)抱歉。 – Bradmage 2012-03-11 16:02:30

回答

1

我使用安全部分的會話,並在cookie中使用散列或user_id。該cookie只能由您的網站訪問。所以除非有其他人在同一臺計算機上登錄,否則如果你有足夠長的到期時間,cookie就會坐在那裏。因此,下週他們回到您的網站並讀取cookie時,您只需使用存儲在數據庫中的user_id或hash開始(您的會話版本是什麼)。如果散列不匹配,用戶必須重新登錄。

我希望這就是你以後的樣子。

編輯:

// I can't remember why right now, But I found to delete the cookie properly, 
// after setcookie, I had to unset the $_COOKIE also. 
setcookie("userid", "", time() - 3600); 
unset($_COOKIE['userid']); 
+0

其實你說的是我已經知道的cookies。我知道cookie存儲在用戶的PC和服務器上的會話中。第三種方法是我不確定的。這是刪除cookie的正確方法嗎?謝謝。 – Loolooii 2012-03-11 16:05:43

+0

沒有問題,很高興看到不是每個人都因爲沒有得到正確的答案而生氣。 – Bradmage 2012-03-11 16:14:57