Asp.net

Web 身份驗證狀態 - 會話與 Cookie?

  • December 10, 2008

從頁面到頁面進行身份驗證和跟踪使用者身份驗證狀態的最佳方法是什麼?有人說會話狀態,有人說 cookie?

我可以只使用一個具有使用者 ID 的會話變數,並在身份驗證後,實例化一個包含使用者資訊的自定義使用者類。然後,在每個頁面上,驗證會話變數是否仍然處於活動狀態並從 User 對象訪問基本使用者數據?

有什麼想法嗎?有什麼好的例子嗎?

沒有完美的方法來做到這一點。如果您將其儲存在 cookie 中,您會認為 cookie 可能會被盜。如果您將其儲存在會話中,您將受到攻擊,因為會話可能被劫持。

就個人而言,我傾向於認為會話更可靠一些,因為唯一儲存在客戶端上的是會話密鑰。實際數據保留在伺服器上。如果你願意的話,它會在離胸部更近的地方打牌。然而,這只是我的偏好,一個好的黑客無論如何都能夠通過偽劣的安全性。

無論您做什麼,都不要嘗試自己實現。你會弄錯的。使用您的特定平台提供的身份驗證系統。您還需要確保有足夠的安全預防措施來保護身份驗證令牌。

為了“安全”而偏愛會話而不是 cookie 的問題是會話使用 cookie 來辨識使用者,因此會話存在任何關於 cookie 的問題。

使用 Sessions 時要記住的一件事是數據局部性。如果您計劃在任何時候擴展到多個網路伺服器,則需要非常小心地將大量數據儲存在會話對像中。

由於您使用的是 .NET,因此您基本上必須編寫自己的會話儲存提供程序來處理這個問題,因為 InProc 不會擴展到超過 1 個伺服器,數據庫提供程序完全是一個壞主意(重點是避免數據庫讀取這裡邊擴容,不加多),而且StateServer有很多容量問題。(過去,我曾使用過 memcached 會話儲存提供程序並取得了一些成功來解決這個問題)。

我會在Google上搜尋簽名的 cookie,並考慮使用它而不是正常的 cookie 或會話。它解決了很多安全問題,並消除了會話的局部性問題。請記住,它們會根據每個請求來回返回,因此請謹慎儲存數據。

引用自:https://stackoverflow.com/questions/356562