Управление сессиями в ASP.NET [Пример]

⚡ Умное резюме

Управление сессиями в ASP.NET позволяет HTTP-приложению без сохранения состояния запоминать данные пользователя между запросами. В статье объясняется, что такое ViewState, объект Session для хранения пар ключ-значение, приводится рабочий пример, рассматриваются режимы состояния сессии, настройка тайм-аута и преимущества управления состоянием сессии.

  • 🌐 Безсостоятельный HTTP: Протокол HTTP не сохраняет данные между запросами, поэтому ASP.NET добавляет механизмы для сохранения состояния.
  • 🇧🇷 ViewState: ViewState автоматически переносит значения элементов управления с одной страницы на другую.
  • 🔑 Объект сессии: Session[“Key”] хранит и извлекает пары ключ-значение на протяжении всего жизненного цикла приложения.
  • ⚙️ Режимы состояний: Состояние сессии может храниться в InProc, на StateServer, в SQL Server или в пользовательском хранилище.
  • 🇧🇷 Тайм-аут: Параметр sessionState timeout в файле web.config определяет, как долго сохраняется сессия.

Учебное пособие по управлению сессиями в ASP.NET с примером.

Управление сеансами 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 Объяснение:-

  1. Первая строка кода берет значение текстового поля "Имя" и сохраняет его в объекте Session. Указав код Session["Name", мы присваиваем свойству имя "Name". Указание имени для свойства упрощает его последующее получение.
  2. Следующая строка кода извлекает сохраненное значение из объекта Session. Затем он записывает это значение обратно клиенту с помощью метода Response.Write.
  3. Наконец, мы делаем все элементы управления на форме невидимыми. Если мы этого не сделаем, все элементы управления, а также значения ответа будут отображаться одновременно.

После внесения указанных выше изменений вы увидите следующий результат.

Выход:

Используйте объект сеанса

Из выходных данных вы можете видеть, что значение имени сеанса было получено и отображено в браузере.

Режимы состояния сессии 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).
  • Хранение больших объемов данных на одного пользователя может негативно сказаться на производительности при высокой нагрузке.

Часто задаваемые вопросы (FAQ)

Да. Искусственный интеллект-ассистенты могут генерировать код для хранения и чтения значений сессии, предлагать подходящий режим состояния и записывать настройки в файл web.config. RevПросмотрите сгенерированный код, чтобы убедиться, что он соответствует вашим требованиям к масштабируемости и безопасности.

Да. Инструменты анализа кода на основе ИИ могут выявлять риски, такие как фиксация сессий, отсутствие файлов cookie, поддерживающих только HTTPS, или хранение конфиденциальных данных в сессии. Воспринимайте эти результаты как рекомендации и подтвердите исправления с помощью тестирования безопасности перед развертыванием.

Состояние сессии хранит данные для сессии одного пользователя, а состояние приложения — данные, общие для всех пользователей приложения. Используйте состояние сессии для значений, относящихся к каждому пользователю, а состояние приложения — для глобальных данных, таких как счетчики или конфигурация.

Нет. Каждому пользователю присваивается отдельная сессия, идентифицируемая уникальным идентификатором сессии, хранящимся в cookie-файле. Один пользователь не может прочитать значения сессии другого пользователя, поэтому для данных по каждому пользователю используется параметр «Сессия».

Подведем итог этой публикации следующим образом: