Статический класс сеанса и несколько пользователей

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

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; }
        }

}

person Tony Borf    schedule 18.09.2009    source источник
comment
Непроверяемый и поощряет неправильные методы, такие как использование статических «глобальных» помощников. Это не техническая проблема, а скорее проблема мышления с долгосрочными последствиями.   -  person MikeSW    schedule 17.05.2013


Ответы (3)


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

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

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

person Jean-Francois    schedule 18.09.2009

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

person Jarrett Meyer    schedule 18.09.2009
comment
Не обязательно... Если вы выполняете межсайтовую аутентификацию... У вас может быть новый аутентифицированный пользователь, использующий тот же сеанс. Я уже сталкивался с этой проблемой. Сеанс не зависит от аутентификации. Если пользователь сможет завершить сессию и убить авторизацию на первом сайте... авторизация пропадет со второго сайта, но сессия будет отдельной. - person KingOfHypocrites; 15.07.2014

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

person Nirlep    schedule 18.09.2009