2011-12-20 141 views
2

我正在試圖建立一個安全的PHP登錄系統,但遇到了一些我不確定如何處理的過程。檢查用戶是否登錄

用戶登錄後,檢查他們在後續頁面上登錄的最佳方法是什麼?目前我正在設置會話變量,但是我應該使用另一種方法嗎?我應該每次登錄時都生成一個唯一的ID,如果有的話,我會如何使用它?將數據庫&中的副本作爲Cookie存儲並在每個頁面加載比較它們?或者你們可以想到的其他方法。

謝謝大家提前。

+1

只需在會話中存儲他們的用戶ID就足夠了。 $ _SESSION ['uid']然後檢查是否(!empty($ _ SESSION ['uid])更多涉及的方法是將整個用戶對象存儲在會話中,對象必須是可序列化的 – 2011-12-20 16:09:12

+0

@DmitriSnytkine,我可以取該會話ID,在另一臺計算機上使用它來代替密碼,這聽起來不太安全,另外,如果你想要許多網站實現的「記住我」功能,就應該考慮使用Cookie(例如,請參閱[保留我的簽名In](https://login.yahoo.com/config/login_verify)on Yahoo。) – FakeRainBrigand 2011-12-20 16:13:03

+0

@FakeRainBrigand在共享主機中,一個好的做法是將您的會話(和其他敏感數據)存儲在您的數據庫中。 – macjohn 2011-12-20 16:20:19

回答

1

我總是使用會話方法,但是如果您想要非常安全(防止會話劫持),您可以將當前IP和用戶的其他特徵與會話ID一起保存在數據庫的MD5哈希中。然後,在登錄後打開頁面時,您可以使用客戶端屬性重新生成MD5哈希,並使用數據庫中的會話ID檢查該哈希。通過這種方式,劫持會話將會更加困難,甚至是不可能的。當然,'mysql會話'必須被刪除,或者不能重複使用,因爲用戶可能會更換計算機等,但它會阻止劫持活動會話。

+0

理論上一個堅實的計劃,但我會盡量遠離cookie,如果我瀏覽您的網站無痕/匿名模式,您的整個系統將失敗。只在數據庫和總是可用的信息,可以出錯的信息少。 – 2011-12-20 16:59:25

+0

會話ID已經是一個唯一的ID並在用戶的計算機上作爲cookie存儲。基本上php的會話完全按照你的建議進行,除了它不將它存儲在數據庫中,但是你可以編寫你自己的會話處理器類來存儲數據庫中的會話。 – 2011-12-20 16:59:54

+0

不完全是這樣,因爲會話可能被劫持,並且只要劫持者在他的電腦上沒有cookie,它就無法工作。但我以前的評論仍然存在。 – 2011-12-20 17:01:30