ASP.NET - Как я могу кэшировать данные о пользователях на время их посещения? - PullRequest
1 голос
/ 15 июня 2010

Я построил репозиторий, который получает данные пользователя

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

И я хотел бы иметь возможность вывести эти детали вниз ЕСЛИ пользователь вошел в систему И ЕСЛИ кэшированные данные равны нулю.

Каков наилучший способ создания объекта 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 Ответ

2 голосов
/ 15 июня 2010

Сохраните полный пользовательский объект в переменной сеанса, а не просто в элементах.

//store
Session("UserInfo") = _user

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

(Код конвертируется в vb.net с помощью онлайн-конвертера, я не знаю vb.net, поэтому извините за любые синтаксические ошибки)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...