2011-12-16 56 views
4

一旦用戶初始進行了身份驗證,就有要求保留用戶數據的要求。我們不想打到數據庫來查找用戶每次他們導航到一個新的視圖等...在MVC中保留用戶數據3

我有一個用戶類是[序列化],因此它可以存儲在會話中。我也使用SQL服務器來處理會話狀態。我正在考慮在會話中存儲對象,但我真的很討厭這樣做。

最近開發者如何處理這種類型的需求?

+0

你想要堅持什麼數據?你的意思是跟蹤用戶活動?你使用默認的勝利表單身份驗證? – 2011-12-16 19:53:51

+0

我有一個小用戶類,其中有一些道具。 userId,用戶名,lastlogin日期等。 – 2011-12-16 20:12:05

回答

0

方式三:

  1. 加密在cookie中的數據並將其發送給客戶端,解密,只要你需要它
  2. 在高速緩存,會話的ID(例如用戶ID),它存儲服務器端,或任何其他存儲(比cookie更安全)。如果你使用ORM
0

假設你的用戶對象

  • 使用二級緩存策略並不大,我認爲這是可以接受的,將其存儲在會話中不經常更改。
    既然你已經有了一個sql服務器會話,你將會進行SP調用來拉/推數據,並且添加一個小對象,與其他選項相比,它應該具有最小的性能問題,比如將其保存到客戶端並將其發回在每一個請求。 我也會認爲服務器是一個更安全的地方來保存這些信息。
    當您將它存儲在sql中時,您希望最大限度地減少寫入會話(請求鎖定)的次數,因爲它是在排他鎖定會話的密封類中實現的。如果此會話中的任何其他請求需要對SQL會話的寫入訪問權限,則它們將被初始請求阻止,直到它釋放會話鎖定。 (.NET 4中有一些新的鉤子允許您在訪問會話之前更改管道中的SessionStateBehavior)

    如果SQL會話存儲區的perf是一個問題,那麼您可以考慮使用會話狀態服務器(appfabric) 。