ASP.NET - 如何在访问期间缓存用户详细信息?

时间:2010-06-15 05:34:30

标签: asp.net caching

我已经构建了一个获取用户详细信息的存储库

Public Function GetUserByOpenID(ByVal openid As String) As User Implements IUserRepository.GetUserByOpenID
    Dim user = (From u In dc.Users
               Where u.OpenID = openid
               Select u).FirstOrDefault
    Return user
End Function

我希望能够将这些细节拉下来 IF 用户登录和IF 缓存数据为空。

创建包含所有用户详细信息的User对象的最佳方法是什么,并在访问期间将其保留在整个网站上?

我在我的Global.asax中尝试过这个,但是我对使用Session变量并不满意。我宁愿拥有一个包含所有细节的对象。

Private Sub BaseGlobal_AcquireRequestState(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.AcquireRequestState
    If Session("UserName") Is Nothing AndAlso User.Identity.IsAuthenticated Then
        Dim repo As UrbanNow.Core.IUserRepository = New UrbanNow.Core.UserRepository
        Dim _user As New UrbanNow.Core.User
        _user = repo.GetUserByOpenID(User.Identity.Name)

        Session("UserName") = _user.UserName()
        Session("UserID") = _user.ID
    End If
End Sub

1 个答案:

答案 0 :(得分:2)

将完整的用户对象存储在会话变量中,而不仅仅是成员。

//store
Session("UserInfo") = _user

//read
Dim user = DirectCast(Session("UserInfo"), UrbanNow.Core.User)

(代码通过在线转换器转换为vb.net,我不知道任何vb.net,对于任何语法错误都很抱歉)