Asp.net-Mvc

在 asp 身份聲明和會話數據之間進行選擇

  • April 20, 2017

我試圖在將使用者特定數據作為身份聲明或會話數據儲存在我的 MVC 應用程序中之間做出選擇,以減少請求時數據庫往返的次數和頻率。但是,考慮到性能、安全性和其他最佳實踐方面的考慮,我不知道該走哪條路線。

我將不勝感激有關此的任何建議。

根據我對聲明、cookie 和儲存規則的了解,IMO(這只是我的觀點):

性能方面,我從未見過聲明和會話儲存之間的區別(除非 cookie 從大量聲明中變大),就速度而言,它們似乎都具有相同的性能影響(它們都必須去查找數據從某個地方(CLaims = cookie,會話 = 伺服器驅動器儲存)作為最佳實踐,這將符合您需要儲存多少數據。

根據我的經驗(如果我錯了,請糾正我),但會話數據儲存在伺服器的磁碟上,基本上只有您的伺服器硬碟驅動器可用空間用於大小限制等,而 cookie 確實具有硬編碼的數據大小限制並且您儲存的聲明越多,cookie 就越大,因此,如果您說最大化該 cookie,客戶端可能會看到性能下降,因為它在每個請求中向站點發送整個 cookie 數據,與 Session 一樣伺服器在本地查找數據,瀏覽器發送的數據較少。

所以我對最佳實踐的看法是,如果您保存數據庫查找的持久數據佔用空間很小,那麼實際上沒有最佳實踐可以只使用您喜歡的任何內容,但是如果您儲存了很多位,尤其是字元串,那麼會話將在我看來是最佳實踐,因為它節省了客戶端/伺服器之間的數據往返,並且沒有您在某些時候可能遇到的大小限制,然後拉出您的頭髮想知道為什麼您的數據不存在(這樣做過去我自己,因為如果 cookie 太大,客戶端只是默默地拒絕它,並花了 3 天時間才弄清楚它是 cookie 的大小)

您如何為應用程序儲存使用者數據在很大程度上取決於應用程序本身。但作為指導,使用基於聲明的身份驗證並將聲明儲存在會話 cookie 中是一種非常常見的方法。看看 asp.net 身份 - http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity

您應該能夠優化儲存在會話 cookie 中的數據。例如: - 如果您的應用程序總是需要在每個頁面上顯示使用者的姓名,您可以在會話 cookie 中聲明姓名。但是,如果您只需要在一個“使用者資料”頁面中顯示其他使用者資訊,如地址、公司等…,您可以使用會話 cookie 中儲存的“名稱標識符”聲明在數據庫中查詢這些詳細資訊。如果您查看 ASPNET 身份,您會發現您不需要直接使用會話 cookie,因為 cookie 身份驗證中間件確保聲明可通過 MVC 控制器的使用者屬性(或 ClaimsPrinciple.Current)獲得。您應該通過 User 屬性決定哪些聲明應可用於所有請求,以及應通過某些 userInformation 數據庫查詢哪些使用者屬性。

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