Основы ASP.NET 2.0

       

Web-приложение и сессия, обработка глобальных событий


Понятие приложения только тогда можно применить к проекту, когда все его страницы работают с общей информацией. Когда пользователь регистрируется на сайте, все страницы подстраиваются под его настройки. Например, если приложение — электронный магазин, то выбранные товары помещаются в "корзину", которая "путешествует" вместе с пользователем и позволяет добавлять в нее новые товары.

Однако известно, что протокол HTTP изначально не поддерживает сессии. Обычно сервер посылает страницу в ответ на запрос, и на этом соединение обрывается. Хотя HTTP 1.1 поддерживает режим keep-alive, сервер не в состоянии определить, что запросы идут с одного и того же клиента. В ASP .NET при каждом соединении на сервере создается сессия, идентификатор которой обычно хранится в файле-cookie (или передается в командной строке, если это невозможно).

До сих пор мы рассматривали работу ASP .NET в пределах одной страницы. Нажали кнопку — получили результат. На практике при работе с web-приложениями к цели ведут десятки взаимосвязанных запросов, делающихся на разных страницах. Что объединяет страницы приложения в одно целое?

В ASP .NET есть специальный класс — HttpApplication, представляющий все приложение. Он контролирует его общее состояние и обрабатывает глобальные события.

В основном этот класс используется для хранения объектов уровня приложения. Он предоставляет словарь для хранения объектов, который доступен в любое время с любой страницы.

Также в ASP.NET присутствует другой тип окружения — сессия (объект Session класса HttpSessionState).


Понятие приложения только тогда можно применить к проекту, когда все его страницы работают с общей информацией. Когда пользователь регистрируется на сайте, все страницы подстраиваются под его настройки. Например, если приложение — электронный магазин, то выбранные товары помещаются в "корзину", которая "путешествует" вместе с пользователем и позволяет добавлять в нее новые товары.

Однако известно, что протокол HTTP изначально не поддерживает сессии. Обычно сервер посылает страницу в ответ на запрос, и на этом соединение обрывается. Хотя HTTP 1.1 поддерживает режим keep-alive, сервер не в состоянии определить, что запросы идут с одного и того же клиента. В ASP .NET при каждом соединении на сервере создается сессия, идентификатор которой обычно хранится в файле-cookie (или передается в командной строке, если это невозможно).

До сих пор мы рассматривали работу ASP .NET в пределах одной страницы. Нажали кнопку — получили результат. На практике при работе с web-приложениями к цели ведут десятки взаимосвязанных запросов, делающихся на разных страницах. Что объединяет страницы приложения в одно целое?

В ASP .NET есть специальный класс — HttpApplication, представляющий все приложение. Он контролирует его общее состояние и обрабатывает глобальные события.

В основном этот класс используется для хранения объектов уровня приложения. Он предоставляет словарь для хранения объектов, который доступен в любое время с любой страницы.

Также в ASP.NET присутствует другой тип окружения — сессия (объект Session класса HttpSessionState).




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

Текущая сессия и приложение доступны с любой страницы через свойства Session и Application, так что получить доступ к ним очень просто.

Параметры сессии также доступны в виде словаря через индексатор со строковым параметром. Область видимости переменной сеанса — весь сеанс взаимодействия посетителя с приложением в конкретном окне браузера. Сеансом является период времени, когда пользователь находится на сайте. Он начинается, когда посетитель впервые заходит на сайт. Пользователь может закрыть браузер, и сервер не будет знать об этом. Поэтому в сессии существует таймаут, который по умолчанию равен 20 минутам. Если в течение этого времени пользователь не совершал активных действий на сайте, сессия считается закрытой. Для приложений, где потеря данных критична (например, финансовых), обычно таймаут уменьшают.

С каждой сессией связан 120-битный идентификатор. Он передается от сервера браузеру и обратно через cookie или через командную строку. В приложениях электронной коммерции в переменных сеанса может храниться корзина — то, что уже выбрал пользователь.

Так добавляется переменная сервера:

Session.Add("Username", "Tom"); Session["Username"]= "Tom";



Эти присваивания равносильны.

В сессии могут храниться переменные любых типов, в том числе пользовательские.

Запрос к данным сессии возвращает тип object, поэтому после получения переменной необходимо привести его к нужному типу:

Username= Session["Username"].ToString();

Таймаут страницы можно поменять:

Session.TimeOut = 5;

Явно завершить сеанс позволяет метод Abandon:

Session.Abandon;

Приложение выполняется на сервере. Новое приложение создается, когда хотя бы один пользователь обращается к сайту. Приложение завершается, когда сервер перезагружается или меняется его конфигурация. Следующая строка кода создает переменную приложения с именем Name:

Application["Name"] = "Myname"



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

Текущая сессия и приложение доступны с любой страницы через свойства Session и Application, так что получить доступ к ним очень просто.

Параметры сессии также доступны в виде словаря через индексатор со строковым параметром. Область видимости переменной сеанса — весь сеанс взаимодействия посетителя с приложением в конкретном окне браузера. Сеансом является период времени, когда пользователь находится на сайте. Он начинается, когда посетитель впервые заходит на сайт. Пользователь может закрыть браузер, и сервер не будет знать об этом. Поэтому в сессии существует таймаут, который по умолчанию равен 20 минутам. Если в течение этого времени пользователь не совершал активных действий на сайте, сессия считается закрытой. Для приложений, где потеря данных критична (например, финансовых), обычно таймаут уменьшают.

С каждой сессией связан 120-битный идентификатор. Он передается от сервера браузеру и обратно через cookie или через командную строку. В приложениях электронной коммерции в переменных сеанса может храниться корзина — то, что уже выбрал пользователь.

Так добавляется переменная сервера:

Session.Add("Username", "Tom"); Session["Username"]= "Tom";



Эти присваивания равносильны.

В сессии могут храниться переменные любых типов, в том числе пользовательские.

Запрос к данным сессии возвращает тип object, поэтому после получения переменной необходимо привести его к нужному типу:

Username= Session["Username"].ToString();

Таймаут страницы можно поменять:

Session.TimeOut = 5;

Явно завершить сеанс позволяет метод Abandon:

Session.Abandon;

Приложение выполняется на сервере. Новое приложение создается, когда хотя бы один пользователь обращается к сайту. Приложение завершается, когда сервер перезагружается или меняется его конфигурация. Следующая строка кода создает переменную приложения с именем Name:

Application["Name"] = "Myname"


Содержание раздела