Изучение сессии в ASP.Net
ОГЛАВЛЕНИЕ
Данная статья описывает сессию в ASP.Net 2.0. Разные типы сессии, ее конфигурация. Также описана сессия в веб-ферме, балансировщике нагрузки, веб-саде, и т.д.
Введение
Данная статья дает хорошее понимание сессии. В ней описаны основы сессии, разные типы хранения объекта сессии, поведение сессии в веб-ферме, сессия в балансировщике нагрузки и т.д. Также объяснены особенности поведения сессии в условиях реального производства.
Что такое сессия?
Интернет не сохраняет состояние, а значит, новый экземпляр класса веб-страницы вновь создается при каждой отправке страницы на сервер. Как известно, HTTP - протокол без сохранения состояния, он не способен хранить клиентскую информацию о странице. Если пользователь вставит какие-то данные и перейдет на следующую страницу, то эти данные потеряются, и пользователь не сможет извлечь данные. Что нужно? Нужно хранить информацию. Сессия позволяет хранить информацию в памяти сервера. Она поддерживает хранение любого типа объекта наряду с пользовательским объектом. Для каждого клиента данные сессии хранятся отдельно, то есть данные сессии хранятся согласно клиенту. Посмотрите на следующую схему.
Рис. Для каждого клиента данные сессии хранятся отдельно
Управление состоянием с помощью сессии – одно из лучших средств asp.net, потому что оно безопасно, прозрачно от пользователей, и в ней можно хранить любой объект. Наряду с плюсами, порой сессия вызывает проблему быстродействия для сайтов с интенсивным трафиком, потому что сессия хранится в памяти сервера, и клиенты читают данные из самого сервера. Рассмотрим плюсы и минусы использования сессии в веб-приложении.
Плюсы и минусы сессии
Ниже приводятся основные плюсы и минусы использования сессии. Все типы сессий подробно описаны далее.
Плюсы:
• Сессия помогает хранить состояния и данные пользователя во всем приложении.
• Она легко реализуется и может хранить любой объект.
• Хранит данные каждого клиента отдельно.
• Сессия безопасна и прозрачна для пользователя.
Минусы:
• Издержки быстродействия в случае большого числа пользователей, так как данные сессии хранятся в памяти сервера.
• Издержки, связанные с сериализацией и десериализацией данных сессии, так как в случае режимов сессии StateServer и SQLServer объект надо сериализовать перед сохранением.
Кроме того, есть много плюсов и минусов сессии, обусловленных типами сессии. Все они разобраны далее.
Сохранение и извлечение значений из сессии
Сохранение и извлечение значений сессии очень похоже на ViewState. С состоянием сессии можно взаимодействовать с помощью класса System.Web.SessionState.HttpSessionState, потому что он предоставляет встроенный объект сессии со страницами Asp.Net.
Следующий код применяется для сохранения значения в сессии
//Сохранение UserName в сессии
Session["UserName"] = txtUser.Text;
Значения извлекаются из сессии так:
//Проверяется, пустая ли переменная сессии
if (Session["UserName"] != null)
{
//Извлечение UserName из сессии
lblWelcome.Text = "Welcome : " + Session["UserName"];
}
else
{
//Делается что-то другое
}
можно сохранить другой объект в сессии. Следующий пример показывает, как сохранить DataSet в сессии.
//Сохранение dataset(набор данных) в сессии
Session["DataSet"] = _objDataSet;
а следующий код показывает извлечение dataset из сессии
// Проверяется, пустая ли переменная сессии
if (Session["DataSet"] != null)
{
//Извлечение UserName из сессии
DataSet _MyDs = (DataSet)Session["DataSet"];
}
else
{
//Делается что-то другое
}
Идентификатор сессии
Asp.Net использует 120- битный идентификатор для отслеживания каждой сессии. Он достаточно безопасен и не подлежит расшифровке. Когда клиент общается с сервером, между ними передается только идентификатор сессии. Когда клиент запрашивает данные, ASP.NET смотрит на идентификатор сессии и извлекает соответствующие данные.
Это делается путем следующих шагов:
• Клиент обращается к веб-сайту, и какая-то информация сохраняется в сессии.
• Сервер создает уникальный идентификатор сессии для этого клиента и сохраняет его в поставщике состояния сессии.
• Снова клиент запрашивает какие-то данные с этим уникальным идентификатором сессии у сервера.
• Сервер смотрит на поставщики сессии и извлекает сериализованные данные из сервера состояний и приводит тип объекта.
Посмотрите на наглядную схему,
Рис. Взаимодействие клиента, веб-сервера и поставщика состояний