- •6. Разработка на asp.Net. Жизненный цикл страницы, пользовательский интерфейс
- •6.1. Описание .Net Framework
- •6.1.1. Возможности среды clr
- •6.1.2. Библиотека классов платформы .Net Framework
- •6.1.3. Развитие платформы .Net
- •6.1.4. Ключевые термины
- •6.2. Обзор технологии asp.Net
- •6.2.1. Жизненный цикл Веб-страниц asp.Net
- •6.2.1.1. Общие этапы жизненного цикла страницы
- •6.2.1.2. События жизненного цикла
- •6.2.1.3. Дополнительные аспекты жизненного цикла страницы
- •6.2.2. Управление состоянием в asp.Net
- •6.2.3. Состояние просмотра ViewState
- •6.2.3.1. Сохранение объектов в состоянии просмотра
- •6.2.3.2. Оценивание преимуществ использования состояния просмотра
- •6.2.4. Строка запроса
- •6.2.4.1. Использование строки запроса
- •6.2.5. Cookie
- •6.2.6. Использование Session
- •6.2.6.1. Архитектура сеанса
- •6.2.6.2. Использование состояния сеанса
- •6.2.6.3. Поставщики состояния сеанса
- •6.2.6.3.1. Off
- •6.2.6.3.2. InProc
- •6.2.6.3.3. StateServer
- •6.2.6.3.4. SqlServer
- •6.2.7. Ключевые термины
- •6.3. Принципы разработки пользовательского интерфейса Интернет-приложений
- •6.3.1. Работа с текстом
- •6.3.2. Использование элементов CheckBox, CheckBoxList, RadioButton, RadioButtonList и BulletedList
- •6.3.3. Использование Image, ImageButton
- •6.3.4. Использование Literal и HiddenField
- •6.3.5. Использование Panel
- •6.3.7. Использование LinkButton
- •6.3.8. Ключевые термины
- •6.4. Краткие итоги
6.2.6. Использование Session
Состояние сеанса (Session) – это самая сложная технология управления состояниями. Она позволяет сохранять информацию на одной странице и затем получать к ней доступ с другой страницы, а также поддерживает объекты любого типа, включая специальные, создаваемые самим разработчиком, типы данных. Лучше всего то, что состояние сеанса использует тот же основанный на коллекциях синтаксис, что и состояние просмотра. Единственное отличие – имя встроенного свойства страницы, которое в данном случае выглядит так: Session.
Каждый клиент, который получает доступ к приложению, имеет свой сеанс и свою отдельную коллекцию данных. Состояние сеанса идеально подходит для сохранения таких данных, как элементы, которые находятся в "корзине для покупок" пользователя, когда он переходит с одной страницы на другую. Но использование состояния сеанса имеет некоторые недостатки. Хотя оно решает многие из проблем, которые возникают в случае применения других технологий управления состояниями, его использование вынуждает Веб-сервер сохранять дополнительную информацию в памяти. Эта необходимость в использовании дополнительных ресурсов памяти сервера, пусть даже в маленьком объеме, очень быстро может достичь угрожающего производительности уровня, когда к сайту начнут получать доступ сотни или тысячи клиентов.
6.2.6.1. Архитектура сеанса
Управление сеансом не является частью HTTP-стандарта. Поэтому ASP.NET приходится выполнять некоторую дополнительную работу, чтобы отследить информацию сеанса и привязать ее к соответствующему ответу.
ASP.NET отслеживает каждый сеанс с помощью уникального 120-ти битового идентификатора. ASP.NET использует для генерации этого значения оригинальный алгоритм, что, согласно статистике, обеспечивает гарантию того, что число будет уникальным и достаточно случайным для того, чтобы злонамеренный пользователь не смог воссоздать или угадать идентификатор сеанса, которым будет пользоваться данный клиент. Этот идентификатор является единственным фрагментом информации, который передается между Веб-сервером и клиентом. Когда клиент предоставляет идентификатор сеанса, ASP.NET отыскивает соответствующий сеанс, извлекает из сервера состояний "сериализованные" данные, преобразовывает их в "реальные" объекты и помещает эти объекты в специальную коллекцию для того, чтобы к ним можно было получить доступ в коде. Весь этот процесс выполняется автоматически.
Рассмотрим, как ASP.NET хранит данные в сессии.
Когда ASP.NET обрабатывает HTTP-запрос, тот проходит через конвейер различных модулей, которые могут реагировать на события приложения. Одним из модулей в этой цепочке является модуль SessionStateModule (который находится в пространстве имен System.Web.SessionState). Этот модуль генерирует идентификатор сеанса, извлекает из внешних поставщиков состояния данные сеанса и затем привязывает эти данные к контексту вызовов запроса. Он также сохраняет данные состояния сеанса, когда обработка страницы завершается. Однако важно понимать, что модуль SessionStateModule фактически не хранит данные сеанса. Вместо этого, состояние сеанса сохраняется во внешних компонентах, которые называются поставщиками состояния. Весь этот процесс показан на рис. 6.4.

Рис. 6.4. Архитектура состояния сеанса в ASP.NET
Состояние сеанса представляет собой пример сменной архитектуры в ASP.NET. Поставщиком состояния может быть любой класс, который реализует интерфейс IStateClientManager, а это означает, что способ работы состояния сеанса можно настроить, просто создав (или купив) новый .NET-компонент. ASP.NET включает три заготовленных поставщика состояния, которые позволяют сохранять информацию в процессе, в отдельной службе и в базе данных SQL Server.
