ASP Global.asa

Global.asa 的位置、四个事件、Application 初始化与限制。

Intermediate
Key PointsGlobal.asa 是站点级事件入口:应用启动、应用结束、会话开始、会话结束四个时机。

放在哪

Text
C:\inetpub\wwwroot\
├── Global.asa          ← 必须在站点根目录,文件名固定
├── default.asp
└── includes\

The name must be exactly Global.asa and it must sit at the site (or application) root. In a subdirectory or with another name it silently does nothing.

四个事件

ASP
<script language="VBScript" runat="Server">

Sub Application_OnStart
    Application("siteName") = "我的站点"
    Application("online") = 0
    Application("startedAt") = Now()
End Sub

Sub Application_OnEnd
    ' 站点停止:清理资源、写日志
End Sub

Sub Session_OnStart
    Session.Timeout = 30
    Session("cart") = ""
End Sub

Sub Session_OnEnd
    Application.Lock
    Application("online") = Application("online") - 1
    Application.Unlock
End Sub

</script>
EventWhenTypical use
Application_OnStart第一个请求或 IIS 启动初始化全局配置
Application_OnEndIIS 停止或应用池回收写日志、关连接
Session_OnStart新用户第一次请求设超时、初始化购物车
Session_OnEnd超时或 Abandon减在线人数、清理临时数据

只能放事件处理

ASP
<%-- 错误:Global.asa 里不能有普通输出 --%>
<script language="VBScript" runat="Server">
    Response.Write "hello"        ' 会报错
</script>

<%-- 正确:只能定义 Sub --%>
<script language="VBScript" runat="Server">
Sub Application_OnStart
    Application("ready") = True
End Sub
</script>

Global.asa may not contain HTML or direct Response.Write. It runs only the Subs when the four events fire; anything else is invalid.

与 object 标签

ASP
<script language="VBScript" runat="Server">
Sub Session_OnStart
    Set Session("conn") = Server.CreateObject("ADODB.Connection")
End Sub
</script>

<object runat="Server" scope="Session" id="conn"
        progid="ADODB.Connection"></object>

<object runat="Server"> declares a session- or application-scoped object, similar to CreateObject in Session_OnStart. It makes lifetimes opaque, so modern code avoids it.

Changes to Global.asa require an IIS restart or app-pool recycle; unlike .asp pages it is not re-parsed per request. When nothing happens, check that first.

常见用途

  • 全局配置 —— 站点名、版本、开关,放在 Application
  • 在线人数 —— Session_OnStart 加、Session_OnEnd 减
  • 统一会话超时 —— 不必在每个页面写 Session.Timeout
  • 启动自检 —— 检查数据库是否可连,把结果放进 Application

Friends & Partners