Global.asa 文件

一、 Global.asa 核心概念

  • 定义:Global.asa 是一个 可选文件,用于存放 ASP 应用程序中 所有页面均可访问​ 的对象、变量和方法的声明。
  • 位置与数量:必须存放在 ASP 应用程序的 根目录​ 中,且 每个应用程序只能有一个​ Global.asa 文件。
  • 脚本支持:所有合法的浏览器脚本(VBScript、JavaScript、JScript、PerlScript 等)都可在其中使用。

二、 Global.asa 允许包含的内容

文件中 只能​ 包含以下五类内容,不能有其他随意的 HTML 或脚本输出:

  1. Application 事件Application_OnStartApplication_OnEnd
  2. Session 事件Session_OnStartSession_OnEnd
  3. <object> 声明(用于创建对象实例)
  4. TypeLibrary 声明(数据类型库)
  5. #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.LockApplication.UnLock 来确保数据一致,避免并发错误。

总结

将你之前整理的笔记串联起来,ASP 内置对象与 Global.asa 的关系如下:

组件角色关联点
Session 对象用户私人会话存储Session_OnStart 创建,由 Session_OnEnd 销毁;超时时间可在其中设置。
Application 对象全局共享数据存储Application_OnStart 初始化,由 Application_OnEnd 清理;用于多页面/多用户共享数据。
#include 指令代码复用与文件引用可在 Global.asa 中使用,用于引入公共函数或配置文件。
Global.asa 文件应用程序生命周期管理器统一托管上述所有对象的开始/结束事件,是 ASP 程序的“总控制台”。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注