2010-04-18 134 views
0

我從php進入ASP.NET,所以我問我的問題的原因是因爲它是應用程序如何工作和處理請求的完全不同的性質。認證模型 - 最佳實踐

好,我有一個存在的表與用戶creditians,如: ID,登錄名,密碼(SHA哈希),電子郵件,電話房間

我所建的自定義成員資格提供這樣它可以處理我自己的數據庫認證模式。

現在我很困惑,因爲User.Identity.Name僅包含用戶的登錄名,但不包含完整的對象(我使用linq2sql與數據庫進行通信,並且需要在其中使用User對象)。

在php應用程序我只是存儲用戶對象在一些靜態方法在Auth類(或其他),但在ASP.NET MVC我不能這樣做,因爲靜態成員是共享所有請求和永久的,而不是隻在當前的請求內生效(如在php中)。

所以我的問題是:我應該如何以及在哪裏檢索並存儲linq2sql用戶對象以便在當前請求和當前請求中使用它? (在請求處理成功後,我期望它將從內存中丟棄,並且下一個請求將再次創建)。

還是我跟着完全錯誤的方式?

回答

1

如果你已經實現了MembershipProvider,那麼你知道它有一個GetUser方法,它獲得一個基於用戶名的MembershipUser對象。

在項目中的任何頁面上,如果運行Membership.GetUser(),它將在當前啓用的身份驗證提供程序中運行GetUser(用戶名)方法。在一個簡單的基本解決方案中,這個調用將進入數據庫並在每次訪問時獲取用戶詳細信息。

我在我的項目中所做的是將當前用戶存儲在Session變量中。這樣,此用戶的當前瀏覽器會話將存儲用戶對象。這很簡單,而且很好,因爲ASP.NET身份驗證基於當前會話。

有一點需要注意 - 每次用戶註銷時,都應清除會話變量。在我的情況下,我使用Session.Abandon()來確保。除此之外 - 這是我迄今爲止使用的方法,它效果很好!