一、 Global.asa 核心概念
- 定义:Global.asa 是一个 可选文件,用于存放 ASP 应用程序中 所有页面均可访问 的对象、变量和方法的声明。
- 位置与数量:必须存放在 ASP 应用程序的 根目录 中,且 每个应用程序只能有一个 Global.asa 文件。
- 脚本支持:所有合法的浏览器脚本(VBScript、JavaScript、JScript、PerlScript 等)都可在其中使用。
二、 Global.asa 允许包含的内容
文件中 只能 包含以下五类内容,不能有其他随意的 HTML 或脚本输出:
- Application 事件(
Application_OnStart、Application_OnEnd) - Session 事件(
Session_OnStart、Session_OnEnd) <object>声明(用于创建对象实例)- TypeLibrary 声明(数据类型库)
#include 指令(引用其他文件)
三、 Global.asa 中的四大事件
事件代码放置在事件句柄(子程序)中,控制 application 和 session 的开始与结束行为。
| 事件 | 触发时机 | 典型用途 |
|---|---|---|
| Application_OnStart | 第一个用户请求 ASP 应用程序的 第一个页面 时;或 Web 服务器重启、Global.asa 文件被编辑之后。 | 初始化全局变量(如访客计数器设为0)、建立数据库连接池。 |
| Session_OnStart | 每当新用户 请求 ASP 应用程序中的第一个页面时(在 Application_OnStart 之后立即发生)。 | 初始化用户会话、记录用户 IP、增加在线人数。 |
| Session_OnEnd | 用户 结束 session 时(默认超时 20 分钟无请求,或调用 Session.Abandon)。 | 减少在线人数、记录用户退出时间、清理用户专属资源。 |
| Application_OnEnd | 最后一个用户 结束 session 之后;典型情况是 Web 服务器停止时。 | 应用程序停止后的清理工作(如删除临时记录、向日志文件写入信息)。 |
事件代码示例
<script language="vbscript" runat="server">
Sub Application_OnStart
' 应用程序启动时执行
End Sub
Sub Application_OnEnd
' 应用程序结束时执行
End Sub
Sub Session_OnStart
' 用户会话开始时执行
End Sub
Sub Session_OnEnd
' 用户会话结束时执行
End Sub
</script>Code language: HTML, XML (xml)
四、 经典实例:在线访客计数器
1. Global.asa 文件代码
<script language="vbscript" runat="server">
Sub Application_OnStart
' 服务器启动时,初始化访客数为 0
Application("visitors") = 0
End Sub
Sub Session_OnStart
' 新访客到来,加锁防止并发冲突,计数 +1
Application.Lock
Application("visitors") = Application("visitors") + 1
Application.UnLock
End Sub
Sub Session_OnEnd
' 访客离开或超时,加锁,计数 -1
Application.Lock
Application("visitors") = Application("visitors") - 1
Application.UnLock
End Sub
</script>Code language: HTML, XML (xml)
2. ASP 页面中显示在线人数
<!DOCTYPE html>
<html>
<body>
<p>There are <%Response.Write(Application("visitors"))%> online now!</p>
</body>
</html>Code language: HTML, XML (xml)
关键点:由于
Application对象是多用户共享的,在修改其变量时(如+1或-1)必须使用Application.Lock和Application.UnLock来确保数据一致,避免并发错误。
总结
将你之前整理的笔记串联起来,ASP 内置对象与 Global.asa 的关系如下:
| 组件 | 角色 | 关联点 |
|---|---|---|
| Session 对象 | 用户私人会话存储 | 由 Session_OnStart 创建,由 Session_OnEnd 销毁;超时时间可在其中设置。 |
| Application 对象 | 全局共享数据存储 | 由 Application_OnStart 初始化,由 Application_OnEnd 清理;用于多页面/多用户共享数据。 |
| #include 指令 | 代码复用与文件引用 | 可在 Global.asa 中使用,用于引入公共函数或配置文件。 |
| Global.asa 文件 | 应用程序生命周期管理器 | 统一托管上述所有对象的开始/结束事件,是 ASP 程序的“总控制台”。 |
Previous: include 指令(引用文件)