.asa是
文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application、Session。
基本内容
它其实是一个可选文件,程序编写者可以在该文件中指定事件
脚本,并声明具有会话和
应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由
应用程序全局使用的对象。该文件必须存放在
应用程序的根目录内。每个
应用程序只能有一个Global.asa文件。
关于Global.asa文件最常见的错误概念是它能为一般的使用的函数和子程序用作书库。Global.asa文件仅能用于创建对象的引用和俘获启动,以及结束Application对象和
Session对象。
Global.asa 它可包含可被 ASP 应用程序中每个页面访问的对象、变量以及方法的声明。所有合法的浏览器脚本都能在 Global.asa 中使用。
包含事件
Application 事件
Session 事件
TypeLibrary 声明
#include 指令
被调用
Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用:
1,当Application_OnStart或Application_OnEnd事件被触发。
2,当Session_OnStart或Session_OnEnd事件被触发。
3,当引用一个在Global.asa文件里被实例化的对象(Object)。
文件格式
如下:
Sub Application_OnStart
'Application_OnStart 当任何客户首次访问该
应用程序的首页时运行
End Sub
Sub Session_OnStart
'Session_OnStart 当客户首次运行 ASP
应用程序中的任何一个页面时运行
End Sub
Sub Session_OnEnd
'Session_OnEnd 当一个客户的
会话超时或退出
应用程序时运行
End Sub
Sub Application_OnEnd
'Application_OnEnd 当该站点的 WEB 服务器关闭时运行
End Sub
一、Session_onStart
先看一个控制用户进入页面的代码:
1,Global.asa(放在被调试的
虚拟目录的根目录下面)
Sub Session_OnStart '只要是用户第一次登录本站,则会跳转到首页
End Sub
然后调试当前
虚拟目录下的任何文件,你会发现所有页面都跳转向
index.asp通过此“强制进入某页”的例子,可以想象当首页需要被关注的时候是非常有必要的。
下面就以一个“在线人数”的例子来继续观察Session_OnStart和Session_OnEnd事件
二、Session_onEnd
2,Global.asa(放在被调试的虚拟目录的根目录下面)
Sub Application_onStart '初始值为0
End Sub
Sub Session_onStart '一个用户访问进行记数加1
Application.Lock
Application.Unlock
End Sub
Sub Session_OnEnd '一个用户进程的结束,记数减1 (P.S.如果没有该事件程序,则执行的就是页面访问程序了。)
Application.Lock
Application.Unlock
End Sub
3,online.asp
<%
session.Abandon( )
response.end
end if
%>
退出
你可以在本机依次打开个窗口,进行关闭窗口
细化深入
继续细化
上面的程序你会发现:当进行“退出”连接后关闭窗口和直接关闭窗口效果是不一样的。因为Session存在时间的缘故,当直接进行关闭窗口,并不能触发Session_OnEnd事件,所以该如何实现这个几乎不可能的想法呢?
大家都知道,当网页进行关闭的时候可以连带一个onunload事件,那么该onunload只要能执行Session的注销功能不就我们需要的吗?废话少说,将online.asp进行修改
3,online.asp
<%
session.Abandon( )
response.end
end if
%>
window.open
退出
注意,online.asp进行onunload的时候会打开exit.asp,那只要在exit.asp中再设置session.Abandon( )不就OK了。
4,exit.asp
<%session.Abandon( )%>
self.close( )
当然,加了段Script
脚本,目的是进行Session的注销以后立即进行关闭本身。
那基本一个在线统计的Web应用就可以了。
深入研究
从上面的调试中,举一反三的你,一定会提出一个问题:如何控制注册用户在线人数?
那下面几个文件一个一个看:
5,Global.asa(放在被调试的虚拟目录的根目录下面)
Sub Application_OnStart
End Sub
Sub Session_OnStart
End Sub
Sub Session_OnEnd
application.lock
application.unlock
end if
End Sub
Sub Application_OnEnd
End Sub
注意本Global.asa中的Session_OnStart块不做任何事件。
又因为不管是否是登录用户的会话结束都会产生OnEnd事件(假如有访客访问了服务器但并不登录,他的会话结束后也会产生OnEnd事件),所以在Session_OnEnd事件里用了句if语句来判断是否为已登录用户的OnEnd事件,如果是才将在线人数减1。
6,login.asp
<%
session.Abandon( )
end if
else
response.end
end if
application.lock
application.unlock
%>
退出
<%else%>
<%end if%>
发挥想象
想想,再想想。仅仅统计有多少人在线是不够的,还要判断用户的在线状态。
可以想象办法基本,当用户登录的时候,在login.asp里将online设为1(如果有数据库则上传),但用户离线时将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为0(同样将为0的值上传)……
事件
Global.asa 中,我们可以告知 application 和 session 对象在启动和结束时做什么事情。完成此项任务的代码被放置在事件操作器中。Global.asa 文件能包含四种类型的事件:
Application_OnStart- 此事件会在首位用户从 ASP
应用程序Session_OnStart- 此事件会在每当新用户请求他或她的在 ASP
应用程序中的首个页面时发生。
Session_OnEnd- 此事件会在每当用户结束 session 时发生。在规定的时间(默认的事件为 20 分钟)内如果没有页面被请求,session 就会结束。
Application_OnEnd- 此事件会在最后一位用户结束其 session 之后发生。典型的情况是,此事件会在 Web 服务器停止时发生。此子程序用于在
应用程序停止后清除设置,
比如删除记录或者向文本文件写信息。
实例
在这个例子中,我们要创建一个可计算当前访客的 Global.asa 文件。
Global.asa 文件:
End SubSub Session_OnStart
Application.UnLock
End Sub
此 ASP 文件会显示当前用户的数目: