您的位置:首页 >ASP基础入门第八篇(ASP内建对象Application和Session)
发布于2026-05-03 阅读(0)
扫一扫,手机访问
大家好,在上一篇内容里,我们详细拆解了ASP内建对象Response的用法。今天,我们把视线转向另外两个重量级角色——Application和Session对象。它们在构建交互式、有状态的Web应用中,发挥着不可替代的核心作用。
ASP的内建对象家族里,除了负责请求响应的“通讯兵”,还有专门管理应用程序全局状态和用户个体会话的“大管家”。下面,我们就来一起摸清这两位“管家”的脾气秉性。
首先来认识Application对象。简单来说,同一个虚拟目录(及其子目录)下的所有.asp文件,就构成了一个ASP应用程序。Application对象的核心价值,在于它为这个应用程序的所有用户,提供了一个共享信息的公共空间,并且数据能在服务器运行期间持久保存。不仅如此,它还提供了控制数据访问的方法,以及响应应用程序启动与停止的事件。
虽然Application本身没有内置属性,但它允许我们创建自定义的属性,或者更准确地说,是添加到它的集合中。语法非常直观:
Application("属性名") = 值
看个具体的例子:
<%
Application("Greeting") = "Hello"
Set Application("MyComponent") = Server.CreateObject("MyComponent")
%>
一旦设置了属性,它就会一直存在,直到Web服务器服务关闭、应用程序停止。正因如此,存储在Application对象中的数据可以被所有访问该应用的用户读取,这让它成了在不同用户间传递信息的绝佳载体。
当多个用户同时尝试修改Application中的数据时,难免会产生冲突。为此,Application对象提供了两个方法来管理并发:
Lock方法:顾名思义,它会锁定Application对象,禁止其他用户修改其属性。这确保了在某一时刻,只有一个客户端能进行修改操作,是保证数据一致性的关键。如果脚本没有显式调用Unlock,服务器会在当前.asp文件执行结束或超时后自动解锁。
Unlock方法:与Lock相反,它解除锁定,允许其他用户进行操作。
一个经典的场景就是页面访问计数器:
<%
Dim Visits
Visits = 0
Application.Lock
Application("Visits") = Application("Visits") + 1
Application.Unlock
%>
欢迎!你是本页的第 <%= Application("Visits") %> 位访客。
通过Lock和Unlock的配合,我们就能轻松实现一个线程安全的计数器。
Application对象有两个关键事件,它们都必须定义在Global.asa这个特殊的全局文件中:
Application_OnStart: 在Web服务器启动,且允许对应用程序文件进行请求时触发。更重要的是,它发生在任何新会话(Session)创建之前。这里是初始化全局变量的理想位置。
Application_OnEnd: 在应用程序退出、所有Session_OnEnd事件处理完毕后触发。
这里有几点需要特别注意,稍不留神就可能出错:
第一,不能存储ASP内建对象。 以下尝试都会引发错误:
<%
Set Application("o1") = Session
Set Application("o2") = Request
'... 其他内建对象同理
%>
第二,直接修改存储在Application中的数组元素是无效的。 因为Application是以集合方式实现的。像下面这样写无法更新数组:
<% Application("StoredArray")(3) = "新值" %>
正确的做法是:先将数组从Application中取出到一个本地副本,修改副本,然后再将整个数组存回Application。下面的例子清晰地展示了这个过程:
文件 asp8a.asp:
<%
Dim MyArray()
Redim MyArray(5)
MyArray(0) = "hello"
MyArray(1) = "some other string"
Application.Lock
Application("StoredArray") = MyArray
Application.Unlock
Response.Redirect "asp8b.asp"
%>
文件 asp8b.asp:
<%
LocalArray = Application("StoredArray")
LocalArray(1) = " there"
Response.Write LocalArray(0) & LocalArray(1)
Application.Lock
Application("StoredArray") = LocalArray
Application.Unlock
%>
如果说Application对象是面向所有用户的“公共黑板”,那么Session对象就是给每个用户分配的“私人笔记本”。它用于存储特定用户在一次会话期间所需的信息。当用户在一个应用程序的不同页面间跳转时,Session中的变量不会丢失,始终伴随该用户,直到会话结束。
其背后的工作原理通常是基于Cookie。当用户首次请求应用中的页面时,服务器会检查请求头中是否包含名为ASPSESSIONID的Cookie。如果没有,则创建一个新会话,并生成一个全局唯一的ID,通过Cookie发送给客户端。此后,客户端每次请求都会携带着这个Cookie,服务器借此识别用户,并存取其对应的Session信息。
Session的常见用途包括存储用户偏好(如是否显示图片)和用户身份验证状态。需要警惕的是,如果客户端浏览器禁用Cookie,Session机制将无法正常工作。
SessionID: 返回服务器为该会话生成的唯一标识符(长整型)。这个ID在诸如页面访问统计等场景中非常有用。
Timeout: 以分钟为单位设置会话的超时期限。如果用户在此期限内没有任何刷新或请求,会话将自动终止。
Abandon: Session对象唯一的方法。调用它会立即删除当前Session中存储的所有对象并释放资源。如果没有显式调用Abandon,会话会在超时后被服务器自动清理。使用方法很简单:
<% Session.Abandon %>
与Application类似,Session也有两个定义在Global.asa中的事件:
Session_OnStart: 在新会话创建时触发。这是初始化会话级变量的最佳时机。你甚至可以在其中使用Redirect来强制用户从特定页面开始访问,例如:
Session_OnEnd: 在会话被放弃(Abandon)或超时后触发。
一个会话可以通过三种方式启动:用户首次请求应用内的.asp文件且Global.asa中有Session_OnStart过程;在Session中存储了值;请求的.asp文件通过Global.asa中的
会话的默认超时时间通常是20分钟,但可以根据需要在IIS的“应用程序选项”中进行全局调整。对于特定会话,也可以通过代码设置更短或更长的超时:
<% Session.Timeout = 5 %>
要主动结束会话,除了等待超时,就是调用前文提到的Session.Abandon方法,例如在“退出登录”按钮的对应处理页面中执行。
今天,我们深入探讨了ASP中用于管理应用程序状态和用户状态的两位核心“管家”——Application和Session对象。它们,尤其是在需要用户身份识别和全局数据共享的Web论坛(BBS)、聊天室(Chat)等应用中,几乎是不可或缺的。
理论终究要落地实践。在接下来的篇章中,我们将综合运用目前学到的Request、Response、Application和Session这四个内建对象,共同搭建一个功能完整的ASP应用程序示例。相信通过那个具体的练习,能让你对ASP应用开发的理解和掌握,再上一个坚实的台阶。
希望这篇关于Application和Session对象的解析,能为你的ASP学习之路带来清晰的指引和切实的帮助。
上一篇:ASP编码和解码函数详解
下一篇:ASP开发准则是什么
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9