Веб-приложение VB.NET - общий доступ к сеансам нежелательных пользователей - PullRequest
0 голосов
/ 17 февраля 2012

Я довольно новичок в vb.net, так как я гораздо больше разбираюсь в PHP, но все равно.Я создал веб-приложение, но мои пользователи, похоже, используют один и тот же сеанс, который я не хочу и не могу понять, почему.Я получаю доступ к объекту, в котором храню всю информацию о сеансе, из глобального свойства в модуле. Может ли это быть причиной?

Код выглядит следующим образом:

Module SiteWide
    Private mUserSession As New MyLib.User.UserSession
    Public Property gUserSession() As MyLib.User.UserSession
        Get
            If Not HttpContext.Current Is Nothing AndAlso Not HttpContext.Current.Session Is Nothing Then
                If Not HttpContext.Current.Session("user") Is Nothing Then
                    mUserSession = HttpContext.Current.Session("user")
                End If
            End If

            Return mUserSession 
        End Get
        Set(ByVal value As MyLib.User.UserSession)
            mUserSession = value

            If Not HttpContext.Current Is Nothing AndAlso Not HttpContext.Current.Session Is Nothing Then
                HttpContext.Current.Session("user") = value
            End If
        End Set
    End Property
End Module

1 Ответ

2 голосов
/ 17 февраля 2012

Почему вы используете статический класс (Module) в качестве хранилища для ваших объектов Session? Статика означает широкое применение. mUserSession также является статическим, поэтому все пользователи используют один и тот же сеанс. На самом деле линии

mUserSession = value 

и

mUserSession = HttpContext.Current.Session("user")

в getter / setter перезаписывает его для всех пользователей.

Вы можете обернуть объект Session в свой собственный класс просто для упрощения:

Например:

Public Class MySession
    ' private constructor
    Private Sub New()
    End Sub

    ' Gets the current session.
    Public Shared ReadOnly Property Current() As MySession
        Get
            Dim session As MySession = DirectCast(HttpContext.Current.Session("__MySession__"), MySession)
            If session Is Nothing Then
                session = New MySession()
                HttpContext.Current.Session("__MySession__") = session
            End If
            Return session
        End Get
    End Property

    ' **** add your session properties here, e.g like this:
    Public Property MyID() As Guid
        Get
            Return m_ID
        End Get
        Set(value As Guid)
            m_ID = value
        End Set
    End Property
    Private m_ID As Guid

    Public Property MyDate() As DateTime
        Get
            Return m_MyDate
        End Get
        Set(value As DateTime)
            m_MyDate = Value
        End Set
    End Property
    Private m_MyDate As DateTime

End Class

Примечание : свойство Current также является общим / статическим, но разница в том, что я возвращаю HttpContext.Current.Session, тогда как вы возвращаете один / общий экземпляр.

...