Лекция ASP 3: Объект приложения и объект сеанса
Автор:Eve Cole
Время обновления:2009-05-30 19:58:17
В предыдущей лекции мы узнали о сборе данных Form, сборе данных QueryString и сборе данных ServerVariables объекта Request. Прежде чем продолжить следующее исследование, рекомендуется сначала расслабиться, поскольку объект «Приложение», который будет представлен далее, является относительно абстрактным, и вы, возможно, не сможете различать вещи, когда впервые его поймете. Помните: если вы не можете его найти, не задумывайтесь слишком много о том, что такое объект Application? Как гласит старая поговорка, сначала научитесь это использовать.
1. Поймите объект приложения. Чтобы освежить ваши мысли, давайте взглянем на программу-счетчик (чтобы понять ее, вам следует ее запустить):
Сначала отредактируйте файл wuf16.htm:
<html>
<тело>
Пример записи количества кликов на странице: <a href="wuf17.asp">wuf17.asp</a>
</тело>
</html>
Код wuf17.asp выглядит следующим образом:
<% @LANGUAGE = VBScript %>
<%'wuf17.asp — Запись количества посещений определенной страницы (принцип счетчика)
Опция явная
Dim CountWeb
CountWeb = Request.ServerVariables("SCRIPT_NAME")
«Это гарантирует, что каждая страница имеет уникальную переменную, чтобы избежать путаницы.
%>
<HTML><ТЕЛО>
<%
Response.Write CountWeb & "<Br><Br>" & vbcrlf
Application.Lock 'Пожалуйста, прочитайте объяснение
Приложение(CountWeb) = Приложение(CountWeb) + 1 'Аккумулятор, прибавьте 1 к количеству кликов
Приложение.Разблокировать
Response.Write "Общее количество кликов на этой странице до выключения и перезапуска веб-сервера: " & Application(CountWeb)
%>
</BODY></HTML>
При запуске этой программы для большинства людей используется только одна машина, которая является одновременно веб-сервером и клиентом. Тогда вы можете только представить себе такую ситуацию: два файла вашей домашней страницы размещены на удаленном веб-сервере, и поток отечественных и иностранных пользователей обращается к ним через браузеры. После того, как каждый пользователь щелкнет мышью, значение Application(CountWeb) будет увеличено на 1, и пока сервер, на котором хранится файл wuf17.asp, не закрыт, значение Application(CountWeb) будет продолжать накапливаться. Но учтите, что если сервер выключить, а затем перезапустить, Приложение (CountWeb) снова начнет отсчет с 0 (я запутался, я сказал, почему количество посещений моей страницы всегда однозначное). Чтобы избежать такой ситуации подсчета, которая всегда начинается с нуля, вы должны сохранить значение Application (CountWeb) перед выключением сервера и извлечь его при необходимости в следующий раз, чтобы его можно было накапливать последовательно. чтобы сделать это, пожалуйста, послушайте Decompose после N раз.
Следующий вопрос: что означают Application.Lock и UnLock? Мы только что предположили, что страницу посещает большое количество пользователей, и каждый клик пользователя приведет к увеличению значения Приложения (CountWeb) на 1. Подумайте, не будет ли это беспорядком (Что! Я могу? Подумайте об этом, это должны быть вы (только вы единственный, кто спонсирует домашнюю страницу), поэтому должно существовать правило «первым пришел — первым обслужен». Когда пользователь посещает страницу и ему необходимо изменить значение Application (CountWeb), используйте метод Lock, чтобы заблокировать ее, чтобы другие пользователи не могли ее изменить. После завершения изменения разблокируйте ее.
Видели ли вы из приведенного выше примера, что объект Application предоставляет общую информацию (Application(CountWeb)) всем пользователям и ориентирован на всех пользователей (доступ каждого пользователя приведет к увеличению счетчика на 1). Объект Application также имеет два события: событие Application_OnStart и событие Application_OnEnd (не путайте, это всего лишь начальная концепция в объектно-ориентированных языках программирования. Синтаксис при его использовании следующий:
<SCRIPT LANGUAGE=VBScript RUNAT=Сервер>
Субприложение_OnEnd
'При закрытии WEB-сервера активируется событие Application_OnEnd
'То есть программа выполнит размещенный здесь код
«Поэтому, прежде чем сервер выключится, мы можем изменить значение Application (CountWeb) в wuf17.asp здесь.
'Сохраните его, например, в текстовом файле.
Конец субтитра
Подприложение_OnStart
«Когда первый пользователь просматривает веб-страницу ASP, событие Application_OnStart будет активировано, но когда другие пользователи просматривают веб-страницу в будущем, это событие не произойдет.
'То есть программа выполнит размещенный здесь код
«Таким образом, значение Application(CountWeb), сохраненное в текстовом файле, можно прочитать здесь.
Конец субтитра
</СКРИПТ>
Ниже приведен пример, иллюстрирующий использование событий. Функция этой программы — подсчет общего количества кликов на всех страницах сайта.
Код файла wuf18.asp (другие файлы страниц на сайте аналогичны этому файлу):
<% @LANGUAGE = VBScript %>
<% Опция явная
'Все файлы страниц на сайте должны содержать это предложение <!--#include file="wuf19.asp"-->%>
<!--#include file="wuf19.asp"-->
<HTML><ТЕЛО>
Общее количество посещений всех страниц сайта до выключения и перезапуска сервера: <%= Application("CountAll") %>
</BODY></HTML>
Код файла wuf19.asp:
<% 'wuf19.asp
Приложение.Блокировка
Приложение("CountAll") = Приложение("CountAll") + 1
Приложение.Разблокировать
%>
Файлы wuf18.asp и wuf19.asp размещаются в одном каталоге. Код файла global.asa:
Примечание. Обработчик событий необходимо сохранить в виде текстового файла с именем «global.asa» и поместить в корневой каталог виртуального пути (обычно в том же каталоге, что и файл index.htm или default.htm, например: Возьмем мою машину в качестве примера. С точки зрения абсолютных путей, global.asa находится в папке c:InetPubhome, а wuf18.asp и wuf19.asp — в папке c:InetPubhomeasp). только путь. Разрешено существование файла global.asa.
<SCRIPT LANGUAGE=VBScript RUNAT=Сервер>
'global.asa - wuf18.asp Имя файла в загружаемом пакете — 18global.asa, который необходимо переименовать при его использовании.
Подприложение_OnStart
'Когда первый пользователь просматривает веб-страницу, установите начальное значение счетчика равным 0.
«Когда другие пользователи просматривают сайт в будущем, следующий код больше не будет выполняться.
Приложение.Блокировка
Приложение("CountAll") = 0
Приложение.Разблокировать
Конец субтитра
</СКРИПТ>
Просмотрите wuf18.asp, чтобы просмотреть текущие результаты. Кажется, не сложно просто научиться использовать объект Application.
2. Понимание объекта сеанса. Если использовать предыдущий объект «Приложение» в качестве предзнаменования, то объект «Сессия» становится намного проще. Он аналогичен объекту «Приложение», за исключением того, что он используется только для записи информации, относящейся к одному пользователю. Он ориентирован на одного пользователя, поэтому мы можем использовать объект «Сессия» для хранения информации об одном пользователе.
Как и объект Application, объект Session также имеет два события: событие Session_OnStart и событие Session_OnEnd. Синтаксис использования аналогичен объекту Application.
Стоит отметить, что перед использованием объекта Session вы должны убедиться, что функция Cookie браузера включена (настройка по умолчанию подходит).
Вот пример. Требования к файлу global.asa такие же, как указано выше, поэтому файл global.asa в приведенном выше примере будет перезаписан файлом global.asa в этом примере.
<SCRIPT LANGUAGE=VBScript RUNAT=Сервер>
' global.asa - wuf20.asp Имя файла в пакете загрузки — 20global.asa
SubSession_OnStart
Session("In") = Now 'Функция Now получает текущее время
Конец субтитра
SubSession_OnEnd
Сессия("Выход") = Сейчас
Приложение.Блокировка
Приложение("Выход") = Сеанс("Выход")
Приложение("В") = Сеанс("В")
Приложение («Выход»). Разблокировать
Конец субтитра
</СКРИПТ>
Файл wuf20.asp:
<%@ Language=VBScript %>
<HTML>
<ТЕЛО>
<% 'wuf20.asp
Response.Write «Настройки тайм-аута по умолчанию:» & Session.Timeout & «Минуты<Br>»
Сеанс.Таймаут = 1
Response.Write "Время, когда вы зашли на этот сайт:" & Session("In") & "<Br>"
Ответ. Напишите «Пожалуйста, обновите эту страницу через 1 минуту» и «<Br><Br>».
если Not IsEmpty(Application("Out")), то
Response.Напишите «Последний раз, когда вы заходили на этот сайт:» & Application («In») & «<Br>»
Response.Напишите «В последний раз вы покидали этот сайт:» & Application («Out») & «<Br>»
Ответ. Напишите «Время просмотра (минуты):» &_
Datediff("n",Application("In"),Application("Out")) & "<Br><Br>"
Конец, если
если IsEmpty(Session("Out")), то
Response.Write "Значение сеанса(""Out"") перед обновлением и после обновления пусто" & "<Br>"
Конец, если
%>
</ТЕЛО>
</HTML>
Когда пользователь впервые просматривает веб-страницу, происходит событие Session_OnStart. Программа записывает время, когда пользователь заходит на веб-страницу. Однако событие Session_OnEnd в это время не происходит, поэтому приложение («Out»). значение пустое, и программа не отображает время просмотра.
Мы знаем, что время жизни объекта Application начинается с момента первого просмотра пользователем веб-страницы и до момента выключения сервера. Время существования объекта Session начинается с момента первого просмотра пользователем веб-страницы (начало сеанса) и до окончания сеанса. Так когда же закончится сеанс? В частности, в этом примере Session.Timeout = 1 устанавливает тайм-аут сеанса равным 1 минуте, то есть, если в течение 1 минуты к веб-серверу не поступает запрос, время ожидания сеанса истекает, что приводит к его завершению, происходит событие Session_OnEnd, и программа выполняет код в Session_OnEnd. Здесь мы помещаем время входа и выхода в Application("In") и Application("Out") соответственно, потому что после завершения сеанса объект Session больше не будет существовать. Мы проверили это в конце кода.
Из этой процедуры мы можем увидеть:
1. Объекты приложения и объекты сеанса имеют разное время жизни.
2. Объект сеанса предназначен для одного пользователя, и его значение хранится на клиенте. Просмотр другими пользователями не влияет на однопользовательский объект сеанса. Один пользователь может только читать и записывать значение своего собственного объекта Session (например: Session("In")).
3. Обратите внимание на представление двойных кавычек в Response.Write: (""Out"").
4. Особое напоминание: эта программа не имеет практического применения и предназначена только для отладки (подходит только для просмотра только одним пользователем). Подумайте, почему это так? Ответ в конце этой статьи.
Совет: обратите внимание на характеристики объекта «Приложение».
3. Классический пример: как отобразить количество людей в сети на веб-странице. В следующем примере приложение («Online») используется для хранения количества людей в сети, а приложение («CountAll») — для хранения. хранить общее количество посетителей.
Принцип: когда новый пользователь просматривает веб-страницу, происходит событие Session_OnStart, количество онлайн-пользователей увеличивается на 1, а количество посещающих пользователей также увеличивается на 1. Когда пользователь уходит, событие Session_OnEnd происходит по истечении времени сеанса, и количество людей в сети уменьшается на 1.
Код Global.asa выглядит следующим образом:
<SCRIPT LANGUAGE=VBScript RUNAT=Сервер>
'Global.asa-wuf21.asp
Подприложение_OnStart
Приложение.Блокировка
'Прочитайте здесь начальное значение Application("CountAll")
Приложение.Разблокировать
Конец субтитра
SubSession_OnStart
Приложение.Блокировка
Приложение("Онлайн") = Приложение("Онлайн") + 1
Приложение("CountAll") = Приложение("CountAll") + 1
Приложение.Разблокировать
Конец субтитра
SubSession_OnEnd
Приложение.Блокировка
Приложение("Онлайн") = Приложение("Онлайн") - 1
Приложение.Разблокировать
Конец субтитра
Субприложение_OnEnd
Приложение.Блокировка
'Приложение("CountAll") должно быть сохранено в файле здесь
Приложение.Разблокировать
Конец субтитра
</СКРИПТ>
Код Wuf21.asp выглядит следующим образом:
<%@ Language=VBScript %>
<HTML>
<ТЕЛО>
<%Session.Timeout = 5%>
<P>Количество людей в сети: <%= Приложение("Онлайн")%></P>
<P>Общее количество посетителей: <%= Application("CountAll")%></P>
</ТЕЛО>
</HTML>
Обратите внимание, что эта процедура сравнивается с wuf17.asp. Последний подсчитывает количество кликов, а первый — количество посетителей.
Ответ: Поскольку объект «Приложение» применяется ко всем пользователям, в случае нескольких пользователей просмотр других пользователей также изменит значения «Приложение» («Вход») и «Приложение» («Выход»).