Занятие 5. Хранение пользовательской информации

(Продолжительность занятия 40 минут)

Активные страницы позволяют Web-приложению хранить состояние, то есть информацию, связанную с конкретным пользователем. Web-приложение поддерживает:

Состояния на пользовательских компьютерах поддерживаются с помощью агентов (cookies), которым и посвящено это занятие.

 


Изучив материал этого занятия, Вы сможете:

Применение агентов

Агенты (cookies) — это механизм, позволяющий сохранять рабочее состояние в файле (обычно он называется cookies) на компьютере пользователя.

 


Примечание Хотя основные программы просмотра Web поддерживают применение агентов, есть две проблемы.

Агент похож на жетон для конкретной страницы, который Web-сервер посылает пользователю. Тот возвращает агента серверу при каждом последующем обращении к данной странице (или набору страниц).

Агенты позволяют Web-приложению связывать информацию с пользователем. Вы можете устанавливать и получать значения агентов через набор Cookies.

Когда Web-сервер возвращает пользователю HTTP-ответ, последний может содержать агент со списком ресурсов, для которых он действителен.

Агент передается пользователю посредством заголовка Set-Cookie в НТТР-, ответе. Все последующие HTTP-запросы пользователя, попадающие в диапазон действия агента, сопровождаются текущим значением агента.

Создание агентов

Значения агентов, которых Ваш Web-сервер отправляет пользователю, задаются с помощью набора Cookies объекта Response. Если агент не существует, метод Response.Cookies создаст его на компьютере пользователя.

 


Пример Здесь создается агент со значением city=Redmond:

<% Response.Cookies("city")="Redmond" %>


Если Вы хотите, чтобы агент относился ко всем страницам Вашего Web-приложения, присвойте атрибуту Path агента значение «/». После этого любой запрос страницы Вашего Web-приложения будет сопровождаться отправкой агента.

 


Пример Вот агент, относящийся ко всем страницам Web-приложения:

Response.Cookies("city").Path = "/"


Вы вправе устанавливать и другие атрибуты агента, например срок его действия.

 


Пример Здесь задается срок окончания действия агента:

Response.Cookies("Type").Expires = "July 31, 1997"


Считывание агентов

Программа просмотра, запрашивая страницы Вашего Web-приложения, сопровождает запрос соответствующим агентом (если, конечно, он был создан). Чтобы считать значение агента, используйте набор Cookies объекта Request.

 


Пример Если HTTP-запрос содержит агент со значением city=Redmond, в результате работы кода этого примера будет получено значение Redmond:

<%= 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") = "Редмонд %>


 


Пример Здесь показано, как воспользоваться информацией, сохраненной в объекте Session:

Привет, <%= SessionC'nickname") %>.<BR>

Как погода в <%= Session( "home-town") %>?<BR>


Чтение данных из формы

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

Вы сохраните данные в объекте Session, чтобы их могли использовать другие страницы придуманного нами Web-узла State University.

> Добавление файлов в проект Visual InterDev

  1. Запустите Visual InterDev.
  2. В меню File выберите пункт New.
  3. На вкладке Projects выберите мастер Web Project Wizard.
  4. Назовите проект StateU и выберите для него папку WA\Practice\Ch10\StateU. Нажмите ОК.
  5. Сохраните имя сервера по умолчанию (localhost) и нажмите Next.
  6. Ознакомьтесь с предлагаемыми по умолчанию значениями и нажмите Finish.
  7. В меню Project выберите пункт Add To Project и выберите Files.
  8. В папке WA\Practice\ChlO выберите файлы home.asp, profile.asp и transcript.asp. Нажмите ОК.

> Чтение данных из формы

  1. Дважды щелкните файл profile.asp, чтобы открыть страницу в редакторе Visual InterDev Source Editor.
  2. Измените атрибут ACTION тэга <FORM> так, чтобы он запускал файл profile.asp.

    Чтобы изменить этот атрибут, найдите строку кода

    <FORM NAME=frmProfile ACTION= METHOD=Post>

    и замените ее следующей:

<FORM NAME=frmProfile ACTION=profile.asp METHOD=Post>

  1. Перед тэгом <FORM> добавьте серверный сценарий, приведенный ниже:

    <% 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 %> <Р>

  1. Сохраните изменения в файле profile.asp.

> Тестирование кода profile.asp

  1. Правой кнопкой мыши щелкните файл profile.asp и выберите пункт Preview In Browser.
  2. Введите Ваш идентификатор и имя и выберите область интересов. Нажмите кнопку Submit.
  3. Что произошло после нажатия кнопки Submit?

    ответ

> Использование данных сеанса в других файлах

  1. Дважды щелкните profile.asp для возврата в окно кода Visual InterDev.
  2. Найдите в файле profile.asp следующую строку кода

    <FORM NAME=frmProfile ACTION=profile.asp METHOD=Post>

    и замените ее на приведенную ниже (она вызывает новую активную страницу):

    <FORM NAME=frmProfile ACTION=transcript.asp METHOD=Post>

  3. Сохраните файл profile.asp.
  4. Дважды щелкните файл transcript.asp, чтобы открыть его окне кода Visual InterDev.
  5. Найдите следующую строку кода:

    For Student ID </font> </td>

    Измените ее так:

    For Student ID <%=Session("id")%> </font>

  6. Сохраните изменения в файле transcript.asp.
  7. Щелкните правой кнопкой файл profile.asp и выберите Preview In Browser.
  8. На панели инструментов нажмите Refresh View.
  9. Введите идентификатор и свое имя, выберите область интересов и нажмите кнопку Submit.

    На Web-странице должен появиться текст "For Student ID «номер »".

Объект Application

Объект Application обеспечивает доступ к информации всем пользователям Web-приложения.

Web-приложение запускается, когда пользователь, обратившийся к нему первым, запрашивает .asp-файл из виртуального корневого каталога Вашего Web-приложения. Программа заканчивает свою работу при отключении Web-сервера.

Вы можете создавать и хранить значения в объекте Application точно так же, как в объекте Session. Различие в том, что информация из объекта Application доступна все время, начиная с момента, когда первый пользователь обращается к активной странице, и заканчивая отключением Web-сервера.

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

Синтаксис Для методов объекта Application применяется следующий синтаксис:

Application.метод


Пример Здесь показано, как добавить информацию, полученную с административной страницы, в Web-приложение:

<% Application( "ТемаЛекции") = Request. Form( "лекция")

Application("аудитория") = Request.Fоrm("аудитория")


 


Пример Здесь демонстрируется, как воспользоваться информацией из предыдущего примера:

Не пропустите сегодняшнюю лекцию в аудитории <%= Application( "аудитория") %>,

на тему <%= Аррliсаtiоп("ТемаЛекции") %>


Блокировка и разблокировка объекта Application

Все пользователи обращаются к одному и тому же объекту Application, поэтому вполне возможно, что два человека одновременно попытаются модифицировать его. Методы Lock и Unlock объекта Application помогают предотвратить подобную ситуацию. Объект Application нужно блокировать только в момент непосредственного внесения изменений.

После блокировки пользователи не смогут получить доступ к объекту Application при первой необходимости. Чтобы сгладить эти неудобства, постарайтесь минимизировать время действия метода Lock.

 


Пример Здесь демонстрируется, как методами Lock и Unlock изменить значения счетчика посещений, используемого в Web-приложении:

<%

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 выполняются при завершении приложения.

 


Пример Здесь демонстрируется код для события Application_OnStart в файл Global.asa:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>

Sub Application_OnStart

'Код Вашего сценария

End Sub

</SCRIPT>


События объекта Session

Подобно объекту Application, объект Session снабжен событиями Session_OnStartH Session_OnEnd. Сценарии события Session_OnStart запускаются, когда пользователь, еще не открывший сеанс, запрашивает у Вашего приложения ASP-файл. Все сценарии события Session_OnEnd выполняются по окончании сеанса.

 


Пример Здесь событие Session_OnStart используется для принудительной переадресации пользователя на страницу регистрации на Вашем узле независимо оттого, какую именно активную серверную страницу он запросил у Вашего Web-приложения:

' При открытии сеанса отправить пользователя на страницу регистрации

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).

 


Пример Здесь с помощью PROGID на время сеанса создается экземпляр компонента Advertisement Rotator:

<OBJECT RUNAT=Server SCOPE=Session ID=MyAd PROGID="MSWC.Adrotator">

</OBJECT>


 


Пример Здесь с помощью CLASSID на время работы приложения создается экземпляр компонента Advertisement Rotator:

<OBJECT RUNAT=Server SCOPE=Application ID=MyAd

CLASSID="Clsid:00000293-0000-0010-8000-OOAA006D2EA4"></OBJECT>


Когда Вы применяете тэг <OBJECT> для создания экземпляра компонента на время сеанса или на период работы приложения, переменная, связанная с компонентом, располагается в области имен сеанса или приложения соответственно. Для доступа к экземплярам компонентов Вам не придется пользоваться объектами Session или Application.

 


Пример Вот как открыть экземпляр компонента Advertisement Rotator, объявленный в коде предыдущего примера:

<%= 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 их можно снабдить сценариями.

 

Используются технологии uCoz