2012-07-18 71 views
0

我目前擁有它,當用戶登錄他們的用戶名和用戶標識符保存在cookie中時。由於這不是我現在計劃改變方法的最安全的方法;用戶登錄/記住我/禁止系統

當用戶登錄時,唯一的令牌被保存在cookie中。用戶名,用戶ID,被禁用的布爾和唯一標記存儲會話。 Cookie中的令牌必須與要登錄的會話中的令牌相匹配。

我想過將令牌存儲在數據庫中嗎?在我的代碼中,很多時候我很快需要用戶名和用戶標識符,所以在會話中存儲對我來說是最合理的想法,而不是總是查詢數據庫。

無論如何,我的方法是否合適?如果不是,什麼是經過驗證的方法?

+0

也許我錯過了一些東西,但如果你開始會話時使用登錄,並從他們的數據獲取數據爲什麼你需要設置cookie?如果系統仍然可以使用會話,則cookie中保存的內容無關緊要。如果您在用戶使用cookie登錄時檢查數據庫中的信息會更好。 – Leri 2012-07-18 10:39:06

+0

所以我應該只使用會話進行用戶登錄並忽略cookie?賽森會持續多久? – user892134 2012-07-18 10:41:54

+1

如果您想要「記住我」的功能,您絕對不能忽略Cookie,而不是檢查會話(可能已過期),請在數據庫或其他位置檢查,以確保它仍然「活着」。 – Leri 2012-07-18 10:45:19

回答

0

你的方法聽起來很合適。我不清楚你計劃存儲會話對象的位置,但我認爲將它存儲在數據庫的會話表中可以。確實,這需要數據庫查詢在呈現每個頁面之前從數據庫檢索會話(例如,如果會話令牌不好,您可能希望重定向到登錄頁面),但這不是我體驗中的性能問題。作爲獎勵,一旦你有一個會話表,你可以運行有趣的查詢來跟蹤Web應用的使用情況。

我的Programming PHP副本說:「使用PHP維護狀態的最佳方式是使用內置的會話跟蹤系統。」你應該在寫作之前考慮這一點。

無論採取什麼方法,您都應該確保會話令牌是隨機生成的,並在合理的時間後過期。否則,攻擊者可以通過猜測它來僞造會話令牌,或者竊取其他人的會話令牌並劫持他們的會話。