ASP.NET Session Issue - PullRequest
       2

ASP.NET Session Issue

1 голос
/ 12 февраля 2010

У меня есть пользовательский класс диспетчера сеансов ASP.NET следующим образом:

public sealed class SessionManager : Page
    {
        private const string USER = "User";

        private static readonly SessionManager _instance = new SessionManager();

        private SessionManager()
        {
        }


        public static SessionManager Instance
        {
            get { return _instance; }
        }


        public User User
        {
            get { return Session[USER] as User; }
            set { Session[USER] = value; }
        }

    }

После успешного входа пользователя в систему его полное имя отображается на домашней странице. Ниже приведена проблема, с которой я сталкиваюсь:

1) Сначала я захожу в систему, поскольку полное имя Джона и Джона отображаются на домашней странице, а соответствующий объект пользователя сохраняется в сеансе.

2) Теперь с другого компьютера я вхожу в систему как Mark. Теперь полное имя Марка отображается на домашней странице, а соответствующий объект пользователя сохраняется в сеансе.

3) Теперь, когда я захожу на компьютер, с которого Джон вошел в систему, и обновляю домашнюю страницу, я вижу имя Маркс вместо имени Джонс.

В чем может быть причина этого странного поведения?

1 Ответ

2 голосов
/ 12 февраля 2010

Ваш класс наследуется от System.Web.UI.Page, который устанавливает свой член Session в HttpContext.Current.Session при первом доступе. Поскольку у вас есть синглтон, он всегда будет ссылаться на первый сеанс, в котором был осуществлен доступ к свойству User.

Вы, вероятно, должны сделать что-то вроде этого:

public sealed class SessionManager
{
    private const string USER = "User";

    private static readonly SessionManager _instance = new SessionManager();

    private SessionManager()
    {
    }

    public static SessionManager Instance
    {
        get { return _instance; }
    }

    public User User
    {
        get { return HttpContext.Current.Session[USER] as User; }
        set { HttpContext.Current.Session[USER] = value; }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...