Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Tony BorfОтветов: 3

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

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

}
  • Непроверяемый и поощряет неправильные методы, такие как использование статических "глобальных" помощников. Это не техническая проблема, а скорее проблема мышления с долгосрочными последствиями. MikeSW 17.05.2013

session

Ответы

Ответ 1 · рейтинг 6 · Jean-Francois

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

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

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

Ответ 2 · рейтинг 3 · Jarrett Meyer

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

Ответ 3 · Nirlep

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы