Изучение сессии в ASP.Net - Режим сессии и поставщик состояний
ОГЛАВЛЕНИЕ
Режим сессии и поставщик состояний
В ASP.NET есть следующие режимы сессии:
• InProc
• StateServer
• SQLServer
• Custom
Для каждого состояния сессии есть поставщик сессии. Следующая схема показывает, как они связаны.
Рис. Архитектура состояния сессии
Можно выбрать поставщик состояния сессии исходя из того, какое состояние сессии выбирается. Когда ASP.NET запрашивает любую информацию на базе идентификатора сессии, состояние сессии и его соответствующий поставщик отвечают за отправку надлежащей информации на базе пользователя. Следующая таблица показывает режим сессии вместе с именем ее поставщика.
Режим состояния сессии |
Поставщик состояния |
|
Объект в памяти |
|
Aspnet_state.exe |
|
DataBase |
|
CustomProvider |
Есть еще один режим "Off". Если выбрать этот вариант, сессия будет отключена для приложения. Но использование сессии является целью, поэтому рассматриваются 4 режима состояния сессии.
Состояния сессии
Состояние сессии означает все настройки, сделанные для веб-приложения для сохранения сессии. Состояние сессии сообщает все о конфигурации сессии в web.config или из выделенного кода. В web.config, элементы <SessionState> используются для установки конфигурации сессии. Некоторые из них - Mode, Timeout, StateConnectionString, Custom provider и др. Рассмотрены все до единой части строки подключения. Перед рассмотрением режима сессии кратко ознакомимся с событием сессии.
Событие сессии
В Asp.net есть два типа событий сессии:
• Session_Start
• Session_End
оба этих события обрабатываются в файле global.asax веб-приложения. При запуске новой сессии возбуждается событие session_start, а при закрытии или окончании сессии возбуждается событие Session_End.
void Session_Start(object sender, EventArgs e)
{
// Код, выполняющийся при запуске новой сессии
}
void Session_End(object sender, EventArgs e)
{
// Код, выполняющийся при окончании сессии.
}
Режим сессии
Уже обсуждался режим сессии в ASP.NET. Ниже приводятся разные типы режимов сессии, имеющиеся в ASP.Net.
• Off
• InProc
• StateServer
• SQLServer
• Custom
Если установить режим сессии="off" в web.config, сессия будет отключена во всем приложении. Для этого надо сконфигурировать web.config таким образом:
Внутрипроцессный режим сессии
Это режим сессии по умолчанию в Asp.Net. Он хранит данные сессии в текущем домене приложения. Это лучший режим сессии исходя из быстродействия веб-приложения. Но главный недостаток в том, что данные теряются при перезапуске сервера. Есть еще несколько плюсов и минусов внутрипроцессного режима сессии. Они рассмотрены далее.
Обзор внутрипроцессного режима сессии
Внутрипроцессный режим хранит данные сессии в текущем домене приложения. Поэтому они легко и быстро доступны.
Внутрипроцессный режим сессии хранит данные сессии в объекте памяти в домене данного приложения. Этим управляет рабочий процесс в пуле приложений. Поэтому при перезапуске сервера данные сессии теряются. Если клиент запрашивает данные, поставщик состояния считывает данные из объекта в памяти и возвращает их клиенту. В web.config надо указать режим сессии и установить время ожидания.
Такая установка времени ожидания сессии сохраняет сессию в течение 30 минут. Это можно настроить и из выделенного кода.
Session.TimeOut=30;
В asp.net есть два типа событий сессии - Session_Start() и Session_End(). Это единственный режим, поддерживающий событие Session_End(). Это событие вызывается после истечения времени ожидания сессии. Общий порядок операций для внутрипроцессного состояния сессии таков:
От времени ожидания сессии зависит, когда вызовется Session_End(). Это очень быстрый механизм, потому что при сохранении и извлечении данных не происходит сериализации, и данные остаются в том же домене приложения.
Когда следует использовать внутрипроцессный режим сессии?
Внутрипроцессный – режим сессии по умолчанию. Он очень полезен для маленьких веб-сайтов и когда число пользователей очень маленькое. Избегайте внутрипроцессного режима в случае веб-сада (эта тема подробно рассмотрена далее).
Плюсы и минусы
Плюсы:
• Данные сессии хранятся в объекте памяти текущего домена приложения. Поэтому доступ к данным очень быстрый, и данные легко доступны.
• Для хранения данных при внутрипроцессном режиме сессии не требуется сериализация.
• Реализация очень простая, сходная с использованием состояния просмотра.
Минусы:
Несмотря на то, что внутрипроцессная сессия – самый быстрый, простой и стандартный механизм, он имеет много недостатков.
• Если рабочий процесс или домен приложения возвращается в исходное состояние, все данные сессии теряются.
• Хотя он самый быстрый, но много данных сессий и много пользователей снижают быстродействие из-за памяти.
• Его нельзя использовать в веб-саде.
• Этот режим сессии не подходит для веб-фермы.
Следовательно, внутрипроцессный – очень быстрый механизм сохранения сессии, но подходящий для маленького веб-приложения. Внутрипроцессные данные сессии теряются при перезапуске сервере или возврате домена приложения в исходное состояние. Он также не подходит для веб-фермы и веб-сада.
Теперь рассмотрим другие доступные варианты для преодоления этой проблемы. Первым идет режим сервера состояний.