Занятие 5. Хранение пользовательской информации
(Продолжительность занятия 40 минут)
Активные страницы позволяют Web-приложению хранить состояние, то есть информацию, связанную с конкретным пользователем. Web-приложение поддерживает:
Состояния на пользовательских компьютерах поддерживаются с помощью агентов (cookies), которым и посвящено это занятие.
Применение агентов
Агенты (cookies) — это механизм, позволяющий сохранять рабочее состояние в файле (обычно он называется cookies) на компьютере пользователя.
Агент похож на жетон для конкретной страницы, который Web-сервер посылает пользователю. Тот возвращает агента серверу при каждом последующем обращении к данной странице (или набору страниц).
Агенты позволяют Web-приложению связывать информацию с пользователем. Вы можете устанавливать и получать значения агентов через набор Cookies.
Когда Web-сервер возвращает пользователю HTTP-ответ, последний может содержать агент со списком ресурсов, для которых он действителен.
Агент передается пользователю посредством заголовка Set-Cookie в НТТР-, ответе. Все последующие HTTP-запросы пользователя, попадающие в диапазон действия агента, сопровождаются текущим значением агента.
Создание агентов
Значения агентов, которых Ваш Web-сервер отправляет пользователю, задаются с помощью набора Cookies объекта Response. Если агент не существует, метод Response.Cookies создаст его на компьютере пользователя.
<% Response.Cookies("city")="Redmond" %>
Если Вы хотите, чтобы агент относился ко всем страницам Вашего Web-приложения, присвойте атрибуту Path агента значение «/». После этого любой запрос страницы Вашего Web-приложения будет сопровождаться отправкой агента.
Response.Cookies("city").Path = "/"
Вы вправе устанавливать и другие атрибуты агента, например срок его действия.
Response.Cookies("Type").Expires = "July 31, 1997"
Считывание агентов
Программа просмотра, запрашивая страницы Вашего Web-приложения, сопровождает запрос соответствующим агентом (если, конечно, он был создан). Чтобы считать значение агента, используйте набор Cookies объекта Request.
<%= Request.Cookies("city") %>
Объект Session
Объект Session содержит информацию о конкретном сеансе работы. Переменные, сохраненные в объекте Session, не уничтожаются, когда пользователь перемещается по страницам Web-приложения — напротив, они существуют на протяжении всего сеанса. Объект Session отличается от агента тем, что его поддерживает сервер, а не компьютер пользователя.
Web-сервер автоматически создает объект Session при подключении пользователя и уничтожает его по окончании сеанса.
Сеанс начинается, когда пользователь запрашивает файл активной серверной страницы из виртуального корня Вашего Web-приложения. В начале Web-приложение создает идентификатор SessionID и передает программе просмотра HTTP-ответ для создания соответствующего агента. Хотя агент SessionID передается программе просмотра, он хранится не на жестком диске компьютера пользователя, а в памяти.
Если пользователь отказался принять агент SessionID (см. примечание в разделе «Применение агентов»), объект Session для этого пользователя не поддерживается.
По умолчанию сеанс длится 20 минут. Вы можете изменить это значение, модифицировав следующий параметр реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Se rvices\W3SVC\ASP\Pa rameters\SessionTimeout
Синтаксис объекта Session
Объект Session имеет два свойства и один метод.
Свойство SessionID идентифицирует сеанс пользователя, а свойство Timeout задает значение тайм-аута сеанса.
Метод Abandon уничтожает объект Session и освобождает его ресурсы.
Синтаксис Для установки свойств и применения метода объекта Session используется следующий синтаксис:
Session.свойство\метод
<% Session("nickname") = "Ненси"
Session("hometown") = "Редмонд %>
Привет, <%= SessionC'nickname") %>.<BR>
Как погода в <%= Session( "home-town") %>?<BR>
Чтение данных из формы
В этом упражнении Вы создадите активную страницу, которая считывает данные, предоставленные ей HTML-формой, и сохраняет их в объекте Session.
Вы сохраните данные в объекте Session, чтобы их могли использовать другие страницы придуманного нами Web-узла State University.
> Добавление файлов в проект Visual InterDev
> Чтение данных из формы
Чтобы изменить этот атрибут, найдите строку кода
<FORM NAME=frmProfile ACTION= METHOD=Post>
и замените ее следующей:
<FORM NAME=frmProfile ACTION=profile.asp METHOD=Post>
<% If Not (IsEmpty(Request("txtID"))) Then
'Запрос поступил от кнопки Submit формы
username = Request("txtName")
id = Request("txtID")
major = Request("Major")
'Установка переменных сеанса
Session("username") = username
Session("id") = id
Session("major") = major
%>
Добро пожаловать, <%=username%>, в наш университет.
<Р>Похоже, Вас интересует <%=major%>.
<% End If %> <Р>
> Тестирование кода profile.asp
> Использование данных сеанса в других файлах
<FORM NAME=frmProfile ACTION=profile.asp METHOD=Post>
и замените ее на приведенную ниже (она вызывает новую активную страницу):
<FORM NAME=frmProfile ACTION=transcript.asp METHOD=Post>
For Student ID </font> </td>
Измените ее так:
For Student ID <%=Session("id")%> </font>
На Web-странице должен появиться текст "For Student ID «номер »".
Объект Application
Объект Application обеспечивает доступ к информации всем пользователям Web-приложения.
Web-приложение запускается, когда пользователь, обратившийся к нему первым, запрашивает .asp-файл из виртуального корневого каталога Вашего Web-приложения. Программа заканчивает свою работу при отключении Web-сервера.
Вы можете создавать и хранить значения в объекте Application точно так же, как в объекте Session. Различие в том, что информация из объекта Application доступна все время, начиная с момента, когда первый пользователь обращается к активной странице, и заканчивая отключением Web-сервера.
Например, если Вы хотите сообщить что-то всем, работающим с Вашим Web-приложением, Вы можете создать административную страницу, где администратор введет информацию, адресованную всем пользователям. С этой страницы данные попадут в объект Application, после чего ее можно использовать во всех активных страницах. В результате все пользователи получат одну и ту же административную информацию из одного и того же источника.
Синтаксис Для методов объекта Application применяется следующий синтаксис:
Application.метод
<% Application( "ТемаЛекции") = Request. Form( "лекция")
Application("аудитория") = Request.Fоrm("аудитория")
Не пропустите сегодняшнюю лекцию в аудитории <%= Application( "аудитория") %>,
на тему <%= Аррliсаtiоп("ТемаЛекции") %>
Блокировка и разблокировка объекта Application
Все пользователи обращаются к одному и тому же объекту Application, поэтому вполне возможно, что два человека одновременно попытаются модифицировать его. Методы Lock и Unlock объекта Application помогают предотвратить подобную ситуацию. Объект Application нужно блокировать только в момент непосредственного внесения изменений.
После блокировки пользователи не смогут получить доступ к объекту Application при первой необходимости. Чтобы сгладить эти неудобства, постарайтесь минимизировать время действия метода Lock.
<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
Этот узел посетили
<%= ApplicationC'NumVisits") %> человек.
Обработка событий в файле Global. asa
Global.asa — это первый файл, который обрабатывает Web-сервер, когда получает первый после запуска пользовательский запрос .asp-файла или когда .asp-файл запрашивает пользователь, о котором нет информации.
В состав Web-приложения может входить только один файл Global.asa. Он хранится в виртуальном корневом каталоге приложения. В файле Global.asa указывается следующая информация:
Если Вы сконструировали Web-приложение с помощью мастера, Microsoft Visual InterDev создает файл Global, asa с шаблонами процедур событии и комментариями по использованию этого файла.
События объекта Application
Объект Application имеет два события — Application_OnStart и Application_OnEnd. В
файле Global.asa их можно снабдить сценариями.
Любой сценарий, связанный с событием Application_OnStart, реализуется при запуске приложения. Аналогично, сценарии события Application_OnEnd выполняются при завершении приложения.
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
'Код Вашего сценария
End Sub
</SCRIPT>
События объекта Session
Подобно объекту Application, объект Session снабжен событиями Session_OnStartH Session_OnEnd. Сценарии события Session_OnStart запускаются, когда пользователь, еще не открывший сеанс, запрашивает у Вашего приложения ASP-файл. Все сценарии события Session_OnEnd выполняются по окончании сеанса.
' При открытии сеанса отправить пользователя на страницу регистрации
Sub Session_OnStart
If SessionC'username") = "" Then
' Сохранить название страницы, которую хотел посетить пользователь
Session("startpage") =
Request.ServerVariables("SCRIPT_NAME")
' Отправить пользователя на страницу регистрации
Response.Redirect "profile.htm"
End If
End Sub
Использование тэга <OBJECT> в файле Global.asa
Средствами тэга <OBJECT> в файле Global.asa можно создать компонент, работающий на Web-сервере.
Чтобы использовать тэг <OBJECT> в файле Global.asa, присвойте атрибуту RUNAT значение Server, а атрибуту SCOPE — значение Application или Session.
Чтобы задать компонент, укажите его зарегистрированное имя (PROGID) или идентификатор класса (CLASSID).
<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.Adrotator">
</OBJECT>
<OBJECT RUNAT=Server SCOPE=Application ID=MyAd
CLASSID="Clsid:00000293-0000-0010-8000-OOAA006D2EA4"></OBJECT>
Когда Вы применяете тэг <OBJECT> для создания экземпляра компонента на время сеанса или на период работы приложения, переменная, связанная с компонентом, располагается в области имен сеанса или приложения соответственно. Для доступа к экземплярам компонентов Вам не придется пользоваться объектами Session или Application.
<%= MyAd.GetAdvertisement("addata.txt") %>
Резюме
Активные страницы позволяют хранить в Web-приложениях состояние — информацию, связанную с конкретным посетителем узла, — с помощью агентов и объектов Session и Application. Агенты хранят информацию на компьютере пользователя, а программа просмотра посылает агент серверу при каждом следующем посещении этой страницы (или группы страниц).
Объект Session отличается от агента тем, что хранит информацию о состоянии на сервере. В объекте Session указана информация для конкретного пользователя (или о нем). Web-сервер автоматически создает объект Session в начале сеанса и уничтожает его по завершении сеанса. Объект Session имеет два события:
Session_OnStart и Session_OnEnd.
Как и объект Session, объект Application предназначен для хранения информации. Разница между ними в том, что информация объекта Application доступна все время, начиная с момента первого запроса активной страницы и заканчивая отключением Web-сервера. У объекта Application есть два события: Application_OnStart и Application_OnEnd. В файле Global. asa их можно снабдить сценариями.