1

我有一個擁有表單身份驗證的網站:取消激活數據庫中未使用的會話ID?

1)用戶登錄並選擇是否讓他登錄。

2)服務器生成令牌,將其保存到數據庫並向瀏覽器發送令牌cookie。

注意,當用戶選擇不保留登錄,當他關閉瀏覽器,令牌cookie將到期,如果用戶選擇保持登錄狀態,他在登錄後,令牌cookie將到期的一年。

3)當用戶註銷時,服務器將停用保存在數據庫中的令牌並刪除瀏覽器中的令牌cookie。

問題是,如果用戶選擇不保持登錄狀態,如果他關閉瀏覽器,令牌cookie將過期,但保存在數據庫中的令牌不會被停用 - 服務器將不知道用戶是否關閉了他瀏覽器。

我該如何取消未使用的令牌在我的數據庫?

回答

0

爲了記住登錄細節,在服務器端持續整個會話並不常見。我建議遵循facebook/google的設計:如果用戶希望瀏覽器「記住他」,則生成一些隨機安全的「訪問令牌」cookie,該cookie存儲在用戶表中作爲該用戶的最後一個有效訪問令牌。然後,當瀏覽器再次訪問網站時,它會發送該cookie並且服務器可以檢查它是否與任何現有(有效)訪問令牌相匹配,從而登錄該用戶。

+0

我生成會話ID(令牌),將其保存到數據庫並將其作爲cookie發送到瀏覽器。當用戶訪問我的網站時,我檢查了他的會話cookie並在我的數據庫中找到匹配項。我與谷歌或Facebook的有什麼不同? – dpp

+0

你還需要在你的數據庫中寫入一些到期時間戳,用於令牌,並在登錄時進行測試。您不需要從數據庫中刪除令牌,只需保留最後一個(每個用戶一個)。當然,你不需要爲匿名會話創建令牌....否則你的數據庫將爆炸:) –