2008-12-10 59 views
27

在頁面間驗證和跟蹤用戶身份驗證狀態的最佳方式是什麼?有人說會話狀態,有人說cookie?Web認證狀態 - Session vs Cookie?

我可以只使用具有用戶ID的會話變量,並且在進行身份驗證時,創建一個具有用戶信息的自定義用戶類。然後,在每個頁面上,驗證會話變量是否仍處於活動狀態並從User對象訪問基本用戶數據?

有什麼想法?任何好的例子?

+0

你看過使用內置的aspnet表單身份驗證嗎?它使用cookies,但在安全性方面相當強大,並且會減輕很多工作量。 – 2008-12-10 16:06:55

+0

這很好,但我需要從數據庫驗證用戶的其他一些事情。它可以做到嗎? – Bill 2008-12-10 22:14:58

+0

是的,您可以在用戶的​​個人資料數據中存儲任何內容。如果您不確定如何創建自己的用戶系統,那麼我只會在安全隱患較低的情況下執行此操作( – Shawn 2009-03-10 15:43:56

回答

16

有沒有完美的方式來做到這一點。如果您將它存儲在cookie中,您會發現餅乾可能被盜。如果你將它存儲在會話中,你會因爲會話被劫持而受到抨擊。

就我個人而言,我傾向於認爲會話更可靠一點,因爲存儲在客戶端上的唯一東西是會話密鑰。實際數據保留在服務器上。如果你願意的話,它可以更靠近胸部。然而,這只是我的偏好,而一個好的黑客無論如何都能夠獲得低劣的安全性。

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

+1

),因爲cookie可能被劫持,會話可能會被盜用(因爲它通常作爲簡單cookie的抽象實現) ) – 2009-01-22 11:04:21

1

我不知道它是否是最好的方式來做到這一點,但我們對我們的做法感到滿意。

我們有一個自定義的用戶對象,我們在用戶進行身份驗證時實例化,然後使用Session在應用程序中維護此對象。

在某些應用程序中,我們將它與cookie的使用相結合來持續擴展會話。

25

爲了'安全'而偏袒cookie的會話的問題是會話使用cookie來識別用戶,所以cookies的任何問題都與會話一起出現。

使用會話時需要注意的一件事是數據局部性。如果您計劃隨時擴展到多個網絡服務器,則需要非常小心地將大量數據存儲在會話對象中。

由於您使用.NET,您將基本上必須編寫自己的會話存儲提供程序來處理此問題,因爲InProc不會擴展過去的1臺服務器,DB提供程序完全是一個壞主意(整點以AVOID DB在縮放時讀取此處,而不是添加更多),並且StateServer有很多容量問題。 (過去,我曾使用memcached會話存儲提供程序來取得一些成功來解決此問題)。

我會谷歌的簽名餅乾,並考慮使用,而不是定期的餅乾或會議。它解決了很多安全問題,並通過會話消除了局部問題。請記住它們會在每個請求中來回發送,因此請謹慎存儲數據。

0

Cookie和會話本身並不足夠。它們是用於跟蹤用戶以及他們所做的工具的工具,但您確實需要考慮使用數據庫來保存有關用戶的信息,這些信息也可用於保護應用程序。

-2

會話是餅乾...