Управление сессиями в ASP.NET [Пример]
⚡ Умное резюме
Управление сессиями в ASP.NET позволяет HTTP-приложению без сохранения состояния запоминать данные пользователя между запросами. В статье объясняется, что такое ViewState, объект Session для хранения пар ключ-значение, приводится рабочий пример, рассматриваются режимы состояния сессии, настройка тайм-аута и преимущества управления состоянием сессии.
Управление сеансами ASP.NET
Протокол HTTP, по которому работают все веб-приложения, является протоколом без сохранения состояния. Под отсутствием гражданства это просто означает, что информация не сохраняется от одного запроса к другому.
Например, если у вас есть страница входа в систему с двумя текстовыми полями: одно для имени, а другое для пароля. Когда вы нажимаете кнопку «Войти» на этой странице, приложению необходимо убедиться, что имя пользователя и пароль передаются на следующую страницу.
В ASP.Net это делается несколькими способами. Первый способ — с помощью концепции, называемой ViewState. Именно здесь ASP.Net автоматически хранит содержимое всех элементов управления. Это также гарантирует передачу этого содержимого на следующую страницу. Это делается с помощью свойства, называемого ViewState.
Разработчику не рекомендуется ничего менять в состоянии просмотра. Это связано с тем, что он должен обрабатываться только ASP.Net.
Объект сеанса ASP.NET
Другой способ — использовать объект, называемый «Объект сеанса». Объект Session доступен на протяжении всего жизненного цикла приложения. В объекте Session можно хранить любое количество пар ключ-значение. Таким образом, на любой странице вы можете сохранить значение в объекте Session с помощью приведенной ниже строки кода.
Session["Key"] = value
Это сохраняет значение в объекте Session, а часть 'key' используется для присвоения значению имени. Это позволяет получить значение позже. Для получения значения достаточно выполнить указанное ниже выражение.
Session["Key"]
Пример объекта сеанса ASP.NET
В нашем примере мы будем использовать объект Session для хранения имени, введенного в текстовое поле «Имя» на странице. Затем мы получим это значение и отобразим его на странице соответствующим образом. Давайте добавим приведенный ниже код в файл Demo.aspx.cs.
protected void btnSubmit_Click(object sender, EventArgs e) { Session["Name"] = txtName.Text; Response.Write(Session["Name"]); lblName.Visible = false; txtName.Visible = false; lstLocation.Visible = false; chkC.Visible = false; chkASP.Visible = false; rdMale.Visible = false; rdFemale.Visible = false; btnSubmit.Visible = false; }
Code Объяснение:-
- Первая строка кода берет значение текстового поля "Имя" и сохраняет его в объекте Session. Указав код Session["Name", мы присваиваем свойству имя "Name". Указание имени для свойства упрощает его последующее получение.
- Следующая строка кода извлекает сохраненное значение из объекта Session. Затем он записывает это значение обратно клиенту с помощью метода Response.Write.
- Наконец, мы делаем все элементы управления на форме невидимыми. Если мы этого не сделаем, все элементы управления, а также значения ответа будут отображаться одновременно.
После внесения указанных выше изменений вы увидите следующий результат.
Выход:
Из выходных данных вы можете видеть, что значение имени сеанса было получено и отображено в браузере.
Режимы состояния сессии ASP.NET
ASP.NET может хранить данные сессии в нескольких местах, называемых режимами состояния сессии. Выбранный режим влияет на производительность, масштабируемость и на то, сохранятся ли данные после перезапуска приложения. В таблице ниже приведено сравнение этих режимов:
| режим | Где хранится состояние | лучше всего для |
|---|---|---|
| ИнПрок | В памяти веб-сервера (по умолчанию) | Приложения, работающие на одном сервере; самые быстрые, но теряют производительность при перезапуске. |
| Государственный сервер | Отдельный процесс службы состояний ASP.NET | Веб-фермы; сохраняются после перезапуска приложений. |
| SQLServer | База данных SQL Server | Веб-фермы, нуждающиеся в надежном и масштабируемом состоянии |
| На заказ | Пользовательский поставщик, который вы внедряете. | Специализированные магазины, такие как Redis |
| Выкл. | Состояние сессии отключено | Приложения, которым не требуются сессии |
InProc — это протокол по умолчанию и самый быстрый способ, но для распределенных развертываний StateServer или SQLServer поддерживают доступность сессий на нескольких серверах.
Как настроить тайм-аут сессии в ASP.NET
Сессия не длится вечно; она истекает после периода бездействия. Вы можете установить это время ожидания в файле web.config, используя элемент sessionState, где значение timeout указывается в минутах:
<configuration> <system.web> <sessionState mode="InProc" timeout="20" /> </system.web> </configuration>
Вы также можете установить это в коде с помощью Session.Timeout = 30;По умолчанию время ожидания составляет 20 минут. Выбор более короткого времени ожидания быстрее освобождает память сервера и повышает безопасность, в то время как более длительное время ожидания позволяет пользователям дольше оставаться авторизованными.
Преимущества и недостатки состояния сессии
Сохранение состояния сессии удобно, но перед тем, как полностью на него полагаться, следует взвесить все за и против.
Преимущества:
- Простое в использовании решение для хранения данных о каждом пользователе, например, в магазине.ping Данные для корзины или входа в систему.
- Может хранить сложные объекты, а не только строки.
- Данные хранятся на сервере, поэтому они более защищены, чем данные на стороне клиента.
Минусы:
- Режим InProc потребляет память сервера и не масштабируется в рамках веб-фермы.
- Данные сессии теряются при истечении времени ожидания сессии или перезапуске приложения (в режиме InProc).
- Хранение больших объемов данных на одного пользователя может негативно сказаться на производительности при высокой нагрузке.



