При использовании ASP для написания виртуальных сообществ, онлайн-покупок и других программ объекты Application и Session играют решающую роль, и их можно использовать гибко и рационально.
Этот объект является ключом к улучшению качества программы. Позвольте мне подробно рассказать вам об этих двух встроенных объектах ASP, основываясь на моем опыте в этой области.
1. Обзор членов объекта Application
Члены объекта приложения включают коллекции, методы и события объектов приложения.
⒈Коллекция объектов приложения.
Коллекция содержимого: коллекция всех переменных, хранящихся в объекте Applicaiton, которые не определены с помощью элемента <OBJECT>.
StaticObjects: коллекция всех переменных, хранящихся в объекте Application, определенном с помощью элемента <OBJECT>.
Пример. В файле default.asp есть следующее назначение.
приложение(а)=а
приложение(б)=128
приложение (с) = ложь
Затем есть коллекция содержимого
application.contents(1)=a 'также можно записать как application.contents(a)=a
application.contents(2)=128 'также можно записать как application.contents(b)=128
application.contents(3)=false 'также можно записать как application.contents(c)=false
Автор рекомендует использовать при вызове такой метод, как application.contents(a), потому что это более интуитивно понятно, если он представлен серийным номером.
Рассмотрим порядок назначения.
⒉Методы объекта приложения
Contents.Remove(имя переменной): удалить указанную переменную из коллекции Application.Contents.
Contents.RemoveAll(): удалить все переменные в коллекции Application.Contents.
Lock(): заблокируйте объект приложения, чтобы только текущая страница ASP могла получить доступ к содержимому.
Unlock(): разблокировать объект приложения.
Пример: В default.asp:
приложение(а)=а
приложение(б)=128
приложение (с) = ложь
ответ.запись приложения.содержание(1)&<br>
ответ.запись приложения.содержание(2)&<br>
ответ.запись приложения.содержание(3)&<br>
response.write После удаления b:
application.contents.remove(b)
ответ.запись приложения.содержание(1)&<br>
ответ.запись приложения.содержание(2)&<br>
Результат выполнения:
а
128
ЛОЖЬ
После удаления b:
а
ЛОЖЬ
Если вы хотите удалить все переменные в коллекции, просто используйте application.contents.removeall. Что касается методов Lock и Unlock, то на практике они часто используются Read.
Читатель тоже с ним знаком, так что здесь это не будет обузой.
⒊Событие объекта приложения
OnStart: происходит, когда первый пользователь, обращающийся к серверу, впервые обращается к странице.
OnEnd: происходит, когда завершился сеанс последнего пользователя и были выполнены все коды события OnEnd сеанса, или когда последний пользователь получил доступ.
Сервер возникает через определенный период времени (обычно 20 минут), когда никто не обращается к серверу.
Если вы хотите определить, что делать в событиях OnStart и OnEnd объекта приложения, вам необходимо написать код в файле Global.asa (примеры ниже) и
И поместите файл в корневой каталог сайта (обычно Inetpubwwwroot)
2. Обзор членов объекта Session
Члены объекта Session имеют на один атрибут больше, чем объект Application, а именно: коллекции, свойства, методы и события.
⒈Коллекция объектов сеанса
Содержимое: коллекция всех переменных, хранящихся в определенном объекте сеанса, которые не определены с помощью элемента <OBJECT>.
StaticObject: коллекция всех переменных, определенных с помощью элемента <OBJECT> и хранящихся в объекте Session.
Пример. В файле default.asp есть следующее назначение.
сеанс(а)=а
сеанс(б)=128
сеанс (с) = ложь
Затем есть коллекция содержимого
session.contents(1)=a 'также можно записать как session.contents(a)=a
session.contents(2)=128 'также можно записать как session.contents(b)=128
session.contents(3)=false 'также можно записать как session.contents(c)=false
⒉Свойства объекта сеанса
Кодовая страница: доступна для чтения/записи. Целочисленный тип. Определяет кодовую страницу, используемую для отображения содержимого страницы в браузере. Кодовая страница — это набор символов числовых значений, которые используют разные языки.
Разные кодовые страницы. Например, кодовая страница ANSI — 1252, кодовая страница японского языка — 932, а кодовая страница упрощенного китайского языка — 936.
LCID: доступен для чтения/записи. Целочисленный тип. Определяет идентификатор локали страницы, отправляемый в браузер. LCID — это международное стандартное сокращение, которое однозначно идентифицирует регион, например.
2057 определяет символ валюты текущего региона как £.
SessionID: только для чтения. Длинный тип. Возвращает идентификатор сеанса для этого сеанса. Каждый раз при создании сеанса сервер автоматически присваивает идентификатор. можно основываться на этом
Значение определяет, какой из двух пользователей обращается к серверу первым.
Тайм-аут: доступен для чтения/записи. Целочисленный тип. Определяет лимит времени ожидания в минутах для сеанса. Если пользователь не обновляет или не запрашивает что-либо в течение этого времени
веб-странице сеанс, созданный пользователем, автоматически завершится. Значение по умолчанию — 20.
Вышеупомянутые атрибуты малопригодны в реальных приложениях и в принципе не нуждаются в изменении. В этих атрибутах нет ничего особенного.
⒊Методы объекта сеанса
Contents.Remove(имя переменной): удалить указанную переменную из коллекции Session.contents.
Contents.Removeall(): удалить все переменные в коллекции Session.contents.
Abandon(): завершить текущий сеанс пользователя и уничтожить текущий объект сеанса.
Методы Contents.Remove (имя переменной) и Contents.Removeall() объекта Session в основном такие же, как и у объекта Application.
Чтобы лучше понять, вы можете обратиться к приведенному выше примеру, чтобы изменить приложение на сеанс. Здесь я хочу объяснить Contents.Removeall() и Abandon().
Разница в том, что выполнение этих двух методов освободит текущий
Все переменные сеанса пользовательского сеанса. Разница в том, что Contents.Removeall() просто освобождает значение переменной сеанса, не завершая текущий сеанс.
Помимо освобождения переменной Session, Abandon() также завершит сеанс и вызовет событие Session_OnEnd. Я надеюсь, что все обратят внимание на разницу между ними.
⒋События объекта сеанса
OnStart: срабатывает при создании сеанса пользователя ASP. Это событие генерируется, когда любой пользователь запрашивает любую страницу с этого сервера.
OnEnd: срабатывает при завершении сеанса пользователя ASP. Это событие также срабатывает при использовании метода Abandon() или тайм-аута.
Эти два события аналогичны событиям OnStart и OnEnd приложения Application и должны быть помещены в файл Global.asa.
Давайте сосредоточимся на изучении использования этих четырех событий вместе с вами.
3. Global.asa
Объекты «Приложение» и «Сессия» ASP реализуют функцию, которой нет у других встроенных объектов ASP, — события. Каждый раз, когда посетитель обращается к серверу,
События OnStart (первый посетитель запускает события OnStart приложений и сеансов одновременно, но приложение предшествует сеансу), каждый посетитель
Событие OnEnd будет инициироваться при завершении каждого сеанса (события OnEnd как для приложения, так и для сеанса будут инициироваться при завершении последнего гостевого сеанса, но
Сессия предшествует приложению).
Два события OnStart и OnEnd обычно используются в виртуальных сообществах для подсчета количества людей в сети, изменения онлайн- и офлайн-статуса пользователей и т. д. Чтобы определить эти две вещи конкретно
файл, вам необходимо прописать код в файле Global.asa и поместить файл в корневой каталог сайта (по умолчанию — Inetpubwwwroot). кроме того,
Объекты «Приложение» и «Сеанс» определяют другие встроенные объекты ASP (Ответ, Запрос,
Сервер, Сеанс...) использовать нельзя. Ниже приведен пример подсчета количества людей, находящихся онлайн в виртуальном сообществе, чтобы проиллюстрировать, как использовать эти два события.
Описание файла:
global.asa находится в каталоге d:Inetpubwwwroot.
default.asp находится в каталоге d:Inetpubwwwroot, странице входа в виртуальное сообщество.
Login.asp находится в каталоге d:Inetpubwwwroot и используется для определения имени пользователя и пароля, введенных пользователем.
index.asp находится в каталоге d:Inetpubwwwroot, домашней странице виртуального сообщества.
bbs.mdb находится в каталоге d:Inetpubwwwroot и представляет собой базу данных, в которой хранится информация о пользователях.
Структура базы данных (ACCESS):
===таблица bbs===
идентификатор пользователя, длинное целое число
имя имя пользователя, тип текста
код-пароль, тип текста
статус онлайн онлайн, да/нет
===global.asa===
<script LANGUAGE=VBScript RUNAT=Сервер>
Подприложение_OnStart
приложение (онлайн) = 0
Конец субтитра
subApplication_OnEnd
й суб
SubSession_OnStart
Конец субтитра
SubSession_OnEnd
if session.contents(pass) then 'Определите, является ли это Session_OnEnd вошедшего в систему пользователя
приложение.lock
приложение(онлайн)=приложение(онлайн)-1
приложение.разблокировка
конец, если
Конец субтитра
</скрипт>
==============
===login.asp===
...'Проверка пароля, подключение к базе данных и проверка правильности введенных пользователем имени и пароля.
если проверка пароля прошла то
сеанс(имя)=rs(имя)
сеанс (идентификатор) = rs (идентификатор)
сеанс (проход) = истина
еще
RS.закрыть
конн.закрыть
ответ.запишите пароль неверный!
ответ.конец
конец, если
приложение.lock
приложение(онлайн)=приложение(онлайн)+1
conn.Execute (обновить bbs set online=1, где id=&session(id))'Установить статус пользователя онлайн
приложение.разблокировка
RS.закрыть
конн.закрыть
response.redirect index.asp 'После инициализации данных перейдите на домашнюю страницу сообщества
===========
В этом примере используйте переменную приложения (онлайн) для записи количества онлайн-пользователей, вошедших в сообщество, поскольку, как только пользователь получает доступ к серверу, не имеет значения, является ли он пользователем.
При входе в систему будет сгенерировано событие OnStart, поэтому вы не сможете увеличить Applicaiton (online) на единицу в событии OnStart. Потому что независимо от того, является ли это сеансом вошедшего в систему пользователя
Событие OnEnd будет сгенерировано по его завершению (если посетитель посещает сервер, но не авторизуется в сообществе, событие OnEnd также будет сгенерировано после завершения его сеанса), поэтому в
Оператор if используется в событии Session_OnEnd, чтобы определить, является ли это событием OnEnd для вошедшего в систему пользователя. Если да, то количество людей в сети будет уменьшено на одного.
Это всего лишь простой пример подсчета количества людей в сети. Для полноценного виртуального сообщества недостаточно просто подсчитать, сколько людей находится в сети.
В базе данных есть поле онлайн, которое используется для записи онлайн-статуса пользователя. Когда пользователь входит в систему, для параметра онлайн установлено значение 1 в файле login.asp, но оно не отображается, когда пользователь находится в автономном режиме.
Для параметра Online установлено значение 0. Чтобы улучшить его, вам необходимо изменить событие Session_OnEnd и установить для параметра Online значение 0 в этом событии.
===loal. sas===
<script LANGUAGE=VBScript RUNAT=Сервер>
Подприложение_OnStart
приложение (онлайн) = 0
set application(conn)=Server.CreateObject(ADODB.Connection)
application(db)=Server.MapPath( bs.mdb) 'Лучше всего использовать здесь абсолютный путь bs.mdb, как подробно описано ниже.
Конец субтитра
subApplication_OnEnd
установить приложение (conn) = ничего
Конец субтитра
SubSession_OnStart
Конец субтитра
SubSession_OnEnd
if session.contents(pass) then 'Определите, является ли это Session_OnEnd вошедшего в систему пользователя
application(con).open =driver={Драйвер Microsoft Access (*.mdb)};dbq=&application(db)
приложение.lock
приложение(онлайн)=приложение(онлайн)-1
application(con).Execute (обновить набор друзей онлайн=0, где id=&session.contents(id))
приложение.разблокировка
приложение(con).закрыть
конец, если
Конец субтитра
</сценарий>
==============
На этом этапе полный код завершен. Поскольку объект Сервера нельзя использовать в событии OnEnd приложений и сеансов,
Физический адрес соединения и базы данных на сервере (d:inetpubwwwroot bs.mdb) хранится в переменной приложения и
Предварительно обрабатывается в событии Application_OnStart. Точно так же session(pass) нельзя использовать вместо session.contents в событии Session_OnEnd.
(пройти) (подробное объяснение ниже).
4. Два момента, заслуживающие внимания в примерах этой статьи
⒈session.contents в событии OnEnd
Друзья, которые только начали обращаться к global.asa, часто ссылаются на приведенное выше событие Session_OnEnd.
если session.contents(pass) тогда написано как
если сеанс(пройти), то,
В этом случае система не выдаст сообщение об ошибке, но содержимое после этого никогда не будет выполнено. Это связано с тем, что объект Session запрещено использовать в событии OnEnd.
Но переменные сеанса можно вызывать с помощью коллекции объектов Session. Поскольку IIS не выдавал никаких сообщений об ошибках, автор однажды потратил на это много времени.
между. Я надеюсь, что каждый сможет извлечь из этого урок!
⒉При использовании Server.MapPath для получения физического адреса базы данных в событии Application_OnStart следует использовать абсолютный адрес. Чтобы проиллюстрировать эту проблему, вы можете.
Давайте проведем эксперимент: изменим указанное выше событие Application_OnStart.
application(db)=Server.MapPath( bs.mdb) изменено на:
приложение(дб)=Server.MapPath(bbs.mdb)
Затем создайте тестовый подкаталог в каталоге d:inetpubwwwroot и напишите temp.asp в тестовом каталоге.
====test.asp====
<%response.write приложение(дб)%>
================
Затем скопируйте temp.asp и поместите его в корневой каталог (d:inetpubwwwroot). Откройте global.asa с помощью блокнота, а затем откройте два браузера, браузер A.
Введите адрес http://localhost/temp.asp и нажмите Enter. В браузере будет выведено следующее:
d:inetpubwwwroot bs.mdb
Затем щелкните меню «Файл» в окне «Блокнот» и выберите «Сохранить» (чтобы изменить время изменения global.asa, тем самым заставив IIS перезапустить все службы), а затем нажмите
Введите адрес http://localhost/test/temp.asp в браузере B и нажмите Enter. Вывод в браузере:
d:inetpubwwwrootestbs.mdb
Хотя файл global.asa размещается в корневом каталоге сайта, если в server.mappath используется относительный адрес, срабатывает Application_OnStart.
Если страница, посещенная пользователем события впервые, не принадлежит корневому каталогу, получение физического адреса базы данных не будет ожидаемым результатом, надеюсь, все будут особенно осторожны.