ASP Global.asa
Global.asa 的位置、四个事件、Application 初始化与限制。
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>| Event | When | Typical use |
|---|---|---|
Application_OnStart | 第一个请求或 IIS 启动 | 初始化全局配置 |
Application_OnEnd | IIS 停止或应用池回收 | 写日志、关连接 |
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
放在哪
Text
C:\inetpub\wwwroot\
├── Global.asa ← 必须在站点根目录,文件名固定
├── default.asp
└── includes\文件名必须是 Global.asa,必须放在站点根目录(或某个应用目录的根)。放在子目录里不生效,改名也不生效,而且不会有任何提示。
四个事件
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>| 事件 | 时机 | 典型用途 |
|---|---|---|
| 应用启动 | 第一个请求或 IIS 启动 | 初始化全局配置 |
| 应用结束 | IIS 停止或应用池回收 | 写日志、关连接 |
| 会话开始 | 新用户第一次请求 | 设超时、初始化购物车 |
| 会话结束 | 超时或 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 里不能有 HTML,也不能直接 Response.Write。它只在四个事件被触发时执行 Sub,其他内容一律非法。
与 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"> 在 Global.asa 里声明会话级或应用级对象,效果类似在 Session_OnStart 里 CreateObject。但它让对象生命周期变得不透明,现代代码一般不这么写。
改
Global.asa 后必须重启 IIS 或回收应用池才生效——它不像 .asp 页面那样每次请求都重新解析。改完没反应,先想到这一点。常见用途
- 全局配置 —— 站点名、版本、开关,放在
Application - 在线人数 ——
Session_OnStart加、Session_OnEnd减 - 统一会话超时 —— 不必在每个页面写
Session.Timeout - 启动自检 —— 检查数据库是否可连,把结果放进
Application