ASP Session 对象
Session 对象用于存储用户信息或更改用户会话的设置。
Session 对象
当你在电脑上使用一个应用程序时,你会打开它,进行一些更改,然后关闭它。这就像一个 Session。电脑知道你是谁。它知道你何时打开应用程序以及何时关闭它。然而,在互联网上有一个问题:Web 服务器不知道你是谁,也不知道你在做什么,因为 HTTP 地址不维护状态。
ASP 通过为每个用户创建一个唯一的 Cookie 来解决这个问题。Cookie 被发送到用户的计算机,它包含识别用户的信息。这个接口被称为 Session 对象。
Session 对象存储用户信息或更改用户会话的设置。
存储在 Session 对象中的变量保存有关单个用户信息,并且在同一个应用程序中的所有页面都可以访问。通常存储在会话变量中的信息包括姓名、ID 和偏好。服务器为每个新用户创建一个新的 Session 对象,并在会话过期时销毁该 Session 对象。
Session 何时开始?
当以下情况发生时,会话开始:
- 新用户请求一个 ASP 文件,并且 Global.asa 文件包含一个 Session_OnStart 过程。
- 将值存储在 Session 变量中。
- 用户请求一个 ASP 文件,并且 Global.asa 文件使用 <object> 标签来实例化一个具有会话范围的对象。
Session 何时结束?
如果用户在应用程序中没有请求或刷新页面达到指定时间(默认为 20 分钟),则会话结束。
如果你想设置一个比默认值更短或更长的超时间隔,请使用 Timeout 属性。
下面的示例将超时间隔设置为 5 分钟。
<%
Session.Timeout=5
%>
使用 Abandon 方法可以立即结束会话。
<%
Session.Abandon
%>
注意: 会话的主要问题在于何时应该结束。我们不知道用户的最后一次请求是否是最终请求。因此,我们不知道应该将会话“保持活动”多久。等待一个空闲会话过长时间会占用服务器资源,但如果会话过早删除,用户将不得不重新开始,因为服务器已删除所有信息。找到正确的超时间隔可能很困难!
提示: 只在会话变量中存储少量数据!
存储和检索 Session 变量
Session 对象最重要的特点是你可以将变量存储在其中。
下面的示例将 Session 变量 username 设置为“Donald Duck”,并将 Session 变量 age 设置为“50”。
<%
Session("username")="Donald Duck"
Session("age")=50
%>
当值存储在会话变量中时,可以从 ASP 应用程序中的任何页面访问它。
欢迎 <%Response.Write(Session("username"))%>
上面的行返回:“Welcome Donald Duck”。
你也可以将用户偏好存储在 Session 对象中,然后访问该偏好来选择要返回给用户的页面。
如果用户屏幕分辨率较低,下面的示例将指定页面的纯文本版本。
<%If Session("screenres")="low" Then%>
这是页面的文本版本
<%Else%>
这是页面的多媒体版本
<%End If%>
移除 Session 变量
Contents 集合包含所有会话变量。
可以使用 Remove 方法移除会话变量。
如果会话变量 "age" 的值小于 18,下面的示例将移除会话变量 "sale"。
<%
If Session.Contents("age")<18 then
Session.Contents.Remove("sale")
End If
%>
要移除会话中的所有变量,请使用 RemoveAll 方法。
<%
Session.Contents.RemoveAll()
%>
循环遍历 Contents 集合
Contents 集合包含所有会话变量。你可以循环遍历 Contents 集合,查看其中存储了什么。
<%
Session("username")="Donald Duck"
Session("age")=50
dim i
For Each i in Session.Contents
Response.Write(i & "<br>")
下一步
%>
结果
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>")
下一步
%>
结果
Session 变量: 2
Donald Duck
50
循环遍历 StaticObjects 集合
你可以循环遍历 StaticObjects 集合,查看所有存储在 Session 对象中的对象的值。
<%
dim i
For Each i in Session.StaticObjects
Response.Write(i & "<br>")
下一步
%>