views:

23

answers:

1

I've built a Repository that gets user details

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

And I'd like to be able to pull those details down IF the user is logged in AND IF the cached data is null.

What is the best way to create a User object that contains all of the users details, and persist it across the entire site for the duration of their visit?

I Was trying this in my Global.asax, but I'm not really happy using Session variables. I'd rather have a single object with all the details inside.

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  A: 

Store the full user object in a session variable instead of just members.

//store
Session("UserInfo") = _user

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

(Code is converted to vb.net by online converter, i don't know any vb.net so sorry for any syntax errors)

Jesper Palm
Thanks. I guess session variables are still the way to go.
rockinthesixstring