最新的Web开发教程
 

ASP Session对象


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


Session对象

当你与你的计算机上的应用程序时,你打开它,做一些更改,然后关闭它。 这很像一个会话。 计算机知道你是谁。 它知道,当你打开应用程序,当你关闭它。 然而,在互联网上有一个问题:Web服务器不知道你是谁,你做什么,因为HTTP地址不能保持状态。

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

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

存储在大约一个单一用户会话对象保持信息的变量,并提供给一个应用程序中的所有页面。 会话变量中存储的公共信息是名称,ID和喜好。 服务器会为每个新用户一个新的Session对象,当会话过期销毁Session对象。


什么时候会话开始?

会话启动时:

  • 一个新的用户请求一个ASP文件,并且Global.asa文件包括的Session_OnStart过程
  • 的值被存储在会话变量
  • 用户请求一个ASP文件,并且Global.asa文件使用<object>标签来实例化与会话范围的对象

什么时候会话结束?

如果用户没有请求或在指定时间内申请刷新页面的会话结束。 默认情况下,这是20分钟。

如果你想设置一个超时间隔比默认的更短或更长,使用Timeout属性。

下面的例子设置为5分钟超时间隔:

<%
Session.Timeout=5
%>

使用Abandon方法立即结束会话:

<%
Session.Abandon
%>

Note:与会议的主要问题是,当他们应该结束。 我们不知道,如果用户的最后一个请求是最后一个与否。 所以,我们不知道我们应该如何长时间保持会话"alive" 。 等待太长时间空闲会话在服务器上使用了资源,但如果会话太快删除用户不得不从头再来,因为服务器已经删除了所有的信息。 找到合适的超时时间间隔是很困难的!

Tip:只有存储在会话变量少量的数据!


存储和检索会话变量

关于Session对象最重要的事情是,你可以在其中存储的变量。

下面的例子将设置会话变量username ,以"Donald Duck"和会话变量age"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方法。

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

<%
If Session.Contents("age")<18 then
  Session.Contents.Remove("sale")
End If
%>

要删除会话中的所有变量,使用RemoveAll方法:

<%
Session.Contents.RemoveAll()
%>

遍历目录收藏

Contents集合包含了所有会话变量。 您可以遍历目录的收集,看看有什么存储在它:

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

dim i
For Each i in Session.Contents
  Response.Write(i & "<br>")
Next
%>

结果:

username
age

如果你不知道的内容集合的项目数,您可以使用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
%>