Объект сеанса ASP
Объект Session хранит информацию или изменяет настройки для пользовательского сеанса.
Объект сеанса
Когда вы работаете с приложением на своем компьютере, вы открываете его, вносите какие-то изменения, а затем закрываете его. Это очень похоже на сессию. Компьютер знает, кто вы. Он знает, когда вы открываете приложение и когда закрываете его. Однако в Интернете есть одна проблема: веб-сервер не знает, кто вы и чем занимаетесь, поскольку HTTP-адрес не поддерживает состояние.
ASP решает эту проблему, создавая уникальный файл cookie для каждого пользователя. Файл cookie отправляется на компьютер пользователя и содержит информацию, идентифицирующую пользователя. Этот интерфейс называется объектом Session.
Объект Session хранит информацию или изменяет настройки для пользовательского сеанса.
Переменные, хранящиеся в объекте Session, содержат информацию об одном отдельном пользователе и доступны для всех страниц в одном приложении. Общая информация, хранящаяся в переменных сеанса, — это имя, идентификатор и предпочтения. Сервер создает новый объект Session для каждого нового пользователя и уничтожает объект Session по истечении срока действия сеанса.
Когда начинается сеанс?
Сеанс начинается, когда:
- Новый пользователь запрашивает файл ASP, а файл Global.asa включает процедуру Session_OnStart.
- Значение хранится в переменной сеанса
- Пользователь запрашивает файл ASP, а файл Global.asa использует тег <object> для создания экземпляра объекта с областью действия сеанса.
Когда заканчивается сеанс?
Сеанс завершается, если пользователь не запрашивал и не обновлял страницу в приложении в течение указанного периода. По умолчанию это 20 минут.
Если вы хотите установить интервал времени ожидания, который короче или длиннее значения по умолчанию, используйте свойство Timeout .
В приведенном ниже примере устанавливается интервал тайм-аута в 5 минут:
<%
Session.Timeout=5
%>
Используйте метод Abandon для немедленного завершения сеанса:
<%
Session.Abandon
%>
Примечание . Основная проблема с сеансами заключается в том, КОГДА они должны заканчиваться. Мы не знаем, был ли последний запрос пользователя последним или нет. Поэтому мы не знаем, как долго мы должны поддерживать сеанс «живым». Слишком долгое ожидание бездействующего сеанса расходует ресурсы на сервере, но если сеанс удаляется слишком рано, пользователю приходится начинать все сначала, потому что сервер удалил всю информацию. Найти правильный интервал тайм-аута может быть сложно!
Совет: храните только НЕБОЛЬШИЕ объемы данных в переменных сеанса!
Сохранение и извлечение переменных сеанса
Самое важное в объекте Session — это то, что в нем можно хранить переменные.
В приведенном ниже примере имя пользователя переменной сеанса будет установлено на «Дональд Дак», а возраст переменной сеанса — на «50»:
<%
Session("username")="Donald Duck"
Session("age")=50
%>
Когда значение хранится в переменной сеанса, к нему можно получить доступ с ЛЮБОЙ страницы в приложении ASP:
Welcome <%Response.Write(Session("username"))%>
Строка выше возвращает: «Добро пожаловать, Дональд Дак».
Вы также можете сохранить пользовательские настройки в объекте Session, а затем получить доступ к этим настройкам, чтобы выбрать, какую страницу вернуть пользователю.
В приведенном ниже примере указывается только текстовая версия страницы, если у пользователя низкое разрешение экрана:
<%If Session("screenres")="low" Then%>
This is the text version of the page
<%Else%>
This is the multimedia version of the page
<%End If%>
Удалить переменные сеанса
Коллекция Contents содержит все переменные сеанса.
Можно удалить переменную сеанса с помощью метода Remove.
В приведенном ниже примере переменная сеанса «продажа» удаляется, если значение переменной сеанса «возраст» меньше 18:
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>
Чтобы удалить все переменные в сеансе, используйте метод RemoveAll:
<%
Session.Contents.RemoveAll()
%>
Цикл по коллекции содержимого
Коллекция Contents содержит все переменные сеанса. Вы можете просмотреть коллекцию Contents, чтобы увидеть, что в ней хранится:
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
Next
%>
Результат:
username
age
Если вы не знаете количество элементов в коллекции Contents, вы можете использовать свойство Count:
<%
dim i
dim j
j=Session.Contents.Count
Response.Write("Session variables: " & j)
For i=1 to j
Response.Write(Session.Contents(i) & "<br>")
Next
%>
Результат:
Session variables: 2
Donald Duck
50
Цикл по коллекции StaticObjects
Вы можете просмотреть коллекцию StaticObjects, чтобы увидеть значения всех объектов, хранящихся в объекте Session:
<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>")
Next
%>