我的登錄系統目前的工作原理如下:如何實現隱式註銷?
- 抓住用戶的用戶名和密碼從POST形式。
- 檢查數據庫的用戶名和salted +哈希密碼。
- 如果認證成功,則生成一個長且隨機的字母數字字符串。
- 將此字符串與用戶名一起存儲在MySQL以及
$_SESSION
變量中。- 這與僅將用戶密碼置於
$_SESSION
中相反。我覺得這樣會讓間諜軟件進入並竊取用戶的憑證。
- 這與僅將用戶密碼置於
- 在需要認證的每個網頁(例如非敏感帳戶設置,只有成員的地區,等等),檢查
$_SESSION
用戶名和串對那些存儲在MySQL。 - 如果它們匹配,請繼續並顯示頁面。否則,顯示登錄表單(?)
- 當用戶明確註銷時,從MySQL和
$_SESSION
中刪除隨機字符串。
我卡在的是如何處理當用戶隱式註銷。也就是說,當他/她關閉瀏覽器窗口而不點擊網站上的任何「註銷」按鈕時。我很確定我仍然需要從MySQL中刪除隨機字符串,所以有人不能使用被盜的cookie來登錄。但是,我怎麼知道用戶何時關閉瀏覽器窗口?
(「記住我」的功能是無關緊要的現在)
你的隨機字符串本質上就像一個會話。爲什麼你將它存儲在'$ _SESSION'中而不是cookie?使用會話涉及文件系統訪問,並在處理請求期間獲得對會話文件的獨佔鎖定,阻止它在調用請求之前(或直到調用session_write_close())之前處理其他請求) - 基本上一切都變慢。由PHP創建的會話ID已經與隨機字符串幾乎相同......您最好將其直接存儲在cookie中。 – shesek
讓會話過期。 http://stackoverflow.com/questions/3068744/php-session-timeout – BlueDog