2010-06-15 63 views
1

我已经建立了一个存储库获取用户的详细信息ASP.NET - 如何缓存访问期间的用户详细信息?

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用户在登录,如果缓存的数据为空。

创建一个包含所有用户详细信息的用户对象的最佳方式是什么,并在整个网站访问期间坚持它?

我想在我的Global.asax中这样做,但我并不是很高兴使用会话变量。我宁愿拥有一个包含所有细节的对象。

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 

回答

2

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

//store 
Session("UserInfo") = _user 

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

(Code以在线转换器转换为vb.net,我不知道任何vb.net任何语法错误很抱歉)

+0

感谢。我猜会话变量仍然是要走的路。 – 2010-06-15 05:58:04