ASP 会议对象


Session 对象存储有关用户会话的信息或更改用户会话的设置。


会话对象

当您在计算机上使用应用程序时,您打开它,进行一些更改,然后关闭它。这很像一个会话。计算机知道你是谁。它知道您何时打开应用程序以及何时关闭它。然而,在互联网上存在一个问题:Web 服务器不知道你是谁以及你在做什么,因为 HTTP 地址不维护状态。

ASP 通过为每个用户创建唯一的 cookie 来解决这个问题。 cookie 被发送到用户的计算机,其中包含识别用户的信息。这个接口称为Session对象。

Session 对象存储有关用户会话的信息或更改用户会话的设置。

存储在 Session 对象中的变量保存有关单个用户的信息,并且可供一个应用程序中的所有页面使用。存储在会话变量中的常见信息有名称、ID 和首选项。服务器为每个新用户创建一个新的 Session 对象,并在会话过期时销毁该 Session 对象。


会话何时开始?

会话在以下情况下开始:

  • 新用户请求 ASP 文件,Global.asa 文件包含 Session_OnStart 过程
  • 值存储在会话变量中
  • 用户请求 ASP 文件,Global.asa 文件使用 <object> 标记实例化具有会话范围的对象

会话何时结束?

如果用户在指定时间内未请求或刷新应用程序中的页面,则会话结束。默认情况下,该时间为 20 分钟。

如果要设置比默认值更短或更长的超时间隔,请使用暂停属性。

下面的示例设置了 5 分钟的超时间隔:

<%
Session.Timeout=5
%>

使用放弃立即结束会话的方法:

<%
Session.Abandon
%>

笔记:会话的主要问题是会话何时结束。我们不知道用户的最后一个请求是否是最终请求。所以我们不知道应该将会话保留多久"alive"。等待空闲会话太久会消耗服务器上的资源,但如果会话被删除太快,用户就必须重新开始,因为服务器已删除所有信息。找到正确的超时间隔可能很困难!

提示:仅在会话变量中存储少量数据!



存储和检索会话变量

Session 对象最重要的一点是你可以在其中存储变量。

下面的示例将设置 Session 变量用户名"Donald Duck" 和 Session 变量年龄至"50":

<%
Session("username")="Donald Duck"
Session("age")=50
%>

当该值存储在会话变量中时,可以从 ASP 应用程序中的任何页面访问该值:

Welcome <%Response.Write(Session("username"))%>

上面的行返回:"Welcome Donald Duck"。

您还可以将用户首选项存储在 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 方法删除会话变量。

如果会话变量 "age" 的值低于 18,下面的示例将删除会话变量 "sale":

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