首先.asa是文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application、Session。
它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件必须存放在应用程序的根目录内。每个应用程序只能有一个Global.asa文件。
关于Global.asa文件最常见的错误概念是它能为一般的使用的函数和子程序用作书库。Global.asa文件仅能用于创建对象的引用和俘获启动,以及结束Application对象和Session对象。
Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用:
1.当Application_On
2.当Session_On
3.当引用一个在Global.asa文件里被实例化的对象(Object)。
Global.asa的标准文件格式如下:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_On
'Application_On
End Sub
Sub Session_On
'Session_On
End Sub
Sub Session_On
'Session_On
End Sub
Sub Application_On
'Application_On
End Sub
</SCRIPT>
一、Session_on
先看一个控制用户进入页面的代码:
1.Global.asa(放在被调试的虚拟目录的根目录下面)
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Session_On
response.redirect("htp://www.cnbruce.com/")
End Sub
</SCRIPT>
然后调试当前虚拟目录下的任何文件,你会发现所有页面都跳转向htp://www.cnbruce.com/
通过此“强制进入某页”的例子,可以想象当首页需要被关注的时候是非常有必要的。
下面就以一个“在线人数”的例子来继续观察Session_On
二、Session_on
2.Global.asa(放在被调试的虚拟目录的根目录下面)
<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_on
Application("On
End Sub
Sub Session_on
Application.Lock
Application("On
Application.Unlock
End Sub
Sub Session_On
Application.Lock
Application("On
Application.Unlock
End Sub
</SCRIPT>
3.on
<%
if request.querystring("logout")="true" then
session.Abandon()
response.end
end if
%>
当前共有<%=Application("On
<a href="on
你发现在该页中只有一个Application("On
你可以在本机依次打开个窗口,进行进行关闭窗口或退出两种方法的调试。
三、继续细化一下
上面的程序你会发现:当进行“退出”连接后关闭窗口和直接关闭窗口效果是不一样的。因为Session存在时间的缘故,当直接进行关闭窗口,并不能触发Session_On
大家都知道,当网页进行关闭的时候可以连带一个on
4.on
<%
if request.querystring("logout")="true" then
session.Abandon()
response.end
end if
%>
<body on
当前共有<%=Application("On
<a href="on
注意,on
5.exit.asp
<%session.Abandon()%>
<script>
self.close()
</script>
当然,加了段Script脚本,目的是进行Session的注销以后立即进行关闭本身。那现在基本一个在线统计的Web应用就可以了。
四、深入研究Global.asa
从上面的调试中,举一反三的你,一定会提出一个问题:如何控制注册用户在线人数?
那下面几个文件一个一个看:
6.Global.asa(放在被调试的虚拟目录的根目录下面)
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_On
application("on
End Sub
Sub Session_On
End Sub
Sub Session_On
if session.contents("pass") then '判断是否为登录用户的Session_On
application.lock
application("on
application.unlock
end if
End Sub
Sub Application_On
End Sub
</SCRIPT>
注意:本Global.asa中的Session_On
因为一旦有用户访问服务器而不管用户是否登录,都会产生On
又因为不管是否是登录用户的会话结束都会产生On
并且值得注意的是:session.contents("pass")的使用,因为在On
7.login.asp
<%
if request.querystring("logout")="true" then
session.Abandon()
end if
submitname=request.form("submit")
if submitname="submit" then
name=request.form("name")
pwd=request.form("pwd")
if name="cnbruce" and pwd="cnrose" then
session("name")=name
session("pass")=true
else
response.write "Error Name Or Pwd.<a href='login.asp'>Back</a>"
response.end
end if
application.lock
application("on
application.unlock
%>
当前注册会员<%=application("on
<a href="login.asp?logout=true">退出</a>
<%else%>
<form act
<input type="text" name="name"><br>
<input type="password" name="pwd"><br>
<input type="submit" name="submit" value="submit">
<%end if%>
只是简单地检测用名是cnbruce,密码是cnrose的时候,生成一个session("pass")=true,就是放在Global.asa中判断的。
五.继续发挥想象
想想,再想想。仅仅统计有多少人在线是不够的,还要判断用户的在线状态。
可以想象办法基本,当用户登录的时候,在login.asp里将on
当然,Global.asa远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧:)
评论