Класс статического сеанса и несколько пользователей - PullRequest
7 голосов
/ 18 сентября 2009

Я создаю класс для хранения идентификатора пользователя и роли пользователя в сеансе. Я не уверен, как будет вести себя этот класс, когда на сайте одновременно находятся несколько пользователей. Кто-нибудь видит проблему с этим?

public static class SessionHandler
    {   
        //*** Session String Values ***********************

        private static string _userID = "UserID";
        private static string _userRole = "UserRole";

        //*** Sets and Gets **********************************************************

        public static string UserID
        {
            get
            {
                if (HttpContext.Current.Session[SessionHandler._userID] == null)
                { return string.Empty; }
                else
                { return HttpContext.Current.Session[SessionHandler._userID].ToString(); }
            }
            set
            { HttpContext.Current.Session[SessionHandler._userID] = value; }

        }
        public static string UserRole
        {
            get
            {
                if (HttpContext.Current.Session[SessionHandler._userRole] == null)
                { return string.Empty; }
                else
                { return HttpContext.Current.Session[SessionHandler._userRole].ToString(); }
            }
            set
            { HttpContext.Current.Session[SessionHandler._userRole] = value; }
        }

}

Ответы [ 3 ]

6 голосов
/ 18 сентября 2009

Код, который вы разместили, является точной копией некоторого кода, который мы имеем здесь.

Уже 2 года работает нормально.

Каждый пользователь имеет доступ к своему сеансу. Каждый запрос к серверу - это новый поток. Несмотря на то, что 2 запроса являются одновременными, HttpContext.Current отличается для каждого из этих запросов.

3 голосов
/ 18 сентября 2009

Вы получите новый сеанс для каждого соединения. Никакие два пользователя никогда не будут делиться сессией. Каждое соединение будет иметь свое значение SessionID. Пока пользователь остается на вашей странице (не закрывает браузер и т. Д.), Он будет сохранять этот сеанс от одного запроса к следующему.

0 голосов
/ 19 сентября 2009

Это будет хорошо работать для нескольких пользователей, получающих доступ к вашему приложению, так как будут созданы разные идентификаторы сессий для всех пользователей, обращающихся к приложению одновременно. Он будет работать аналогичным образом, если вы определили две разные переменные сеанса в вашей системе. Это будет похоже на перенос состояний сеанса буксировки с использованием статического класса-оболочки SessionHandler.

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