设为首页
收藏本站
最近更新

文章搜索
本类热门

首页 >> 网络编程 >> ASP >> ASP文摘 >> 新闻正文 [字体: ] [打印文档]
ASP入门进阶之Global.asa文件用法

文章作者:
责任编辑:rosan 录入时间:2007-1-16 13:36:20 来源:
频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意.

百特科技[http://www.PCbyte.cn]专业的空间、主机提供商,域名注册绝对优惠!
我们已经知道Application和Session对象的OnStart、OnEnd事件的脚本,都必须是在 Global.asa 文件中声明的。那究竟Global.asa是什么样的一个文件?它的作用有何?又该如何运用呢?且听我慢慢道来。

首先.asa是文件后缀名,它是Active Server Application的首字母缩写。Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application、Session。

它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象。该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象。该文件必须存放在应用程序的根目录内。每个应用程序只能有一个Global.asa文件。

关于Global.asa文件最常见的错误概念是它能为一般的使用的函数和子程序用作书库。Global.asa文件仅能用于创建对象的引用和俘获启动,以及结束Application对象和Session对象。

Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用:
1,当Application_OnStart或Application_OnEnd事件被触发。
2,当Session_OnStart或Session_OnEnd事件被触发。
3,当引用一个在Global.asa文件里被实例化的对象(Object)。
Global.asa的标准文件格式如下:


<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
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
</SCRIPT>



一、Session_onStart
先看一个控制用户进入页面的代码:
1,Global.asa(放在被调试的虚拟目录的根目录下面)


<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Session_OnStart '只要是用户第一次登录本站,则会跳转到首页
response.redirect("http://www.cnbruce.com/")
End Sub
</SCRIPT>


然后调试当前虚拟目录下的任何文件,你会发现所有页面都跳转向http://www.cnbruce.com/
通过此“强制进入某页”的例子,可以想象当首页需要被关注的时候是非常有必要的。

下面就以一个“在线人数”的例子来继续观察Session_OnStart和Session_OnEnd事件

二、Session_onEnd
2,Global.asa(放在被调试的虚拟目录的根目录下面)


<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_onStart '初始值为0
Application("OnLine") = 0
End Sub

Sub Session_onStart '一个用户访问进行记数加1
Application.Lock
Application("OnLine") = Application("OnLine") + 1
Application.Unlock
End Sub

Sub Session_OnEnd '一个用户进程的结束,记数减1 (P.S.如果没有该事件程序,则执行的就是页面访问程序了。)
Application.Lock
Application("OnLine") = Application("OnLine") - 1
Application.Unlock
End Sub
</SCRIPT>



3,online.asp


<%
if request.querystring("logout")="true" then
session.Abandon()
response.end
end if
%>
当前共有<%=Application("OnLine")%>在线
<a href="online.asp?logout=true">退出</a>


你发现在该页中只有一个Application("OnLine"),而且还是被显示引用的。那么其值来自何方?这正是Global.asa文件的关键所在。
你可以在本机依次打开个窗口,进行进行关闭窗口或退出两种方法的调试。

三、继续细化一下
上面的程序你会发现:当进行“退出”连接后关闭窗口和直接关闭窗口效果是不一样的。因为Session存在时间的缘故,当直接进行关闭窗口,并不能触发Session_OnEnd事件,所以该如何实现这个几乎不可能的想法呢?

大家都知道,当网页进行关闭的时候可以连带一个onunload事件,那么该onunload只要能执行Session的注销功能不就我们需要的吗?废话少说,将online.asp进行修改

3,online.asp


<%
if request.querystring("logout")="true" then
session.Abandon()
response.end
end if
%>
<body onunload=javascript:window.open("exit.asp")>
当前共有<%=Application("OnLine")%>在线
<a href="online.asp?logout=true">退出</a>



注意,online.asp进行onunload的时候会打开exit.asp,那只要在exit.asp中再设置session.Abandon()不就OK了。

4,exit.asp


<%session.Abandon()%>
<script>
self.close()
</script>


当然,加了段Script脚本,目的是进行Session的注销以后立即进行关闭本身。
那现在基本一个在线统计的Web应用就可以了。

四、深入研究Global.asa
从上面的调试中,举一反三的你,一定会提出一个问题:如何控制注册用户在线人数?
那下面几个文件一个一个看:

5,Global.asa(放在被调试的虚拟目录的根目录下面)


<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
application("online")=0
End Sub

Sub Session_OnStart
End Sub

Sub Session_OnEnd
if session.contents("pass") then '判断是否为登录用户的Session_OnEnd
application.lock
application("online")=application("online")-1
application.unlock
end if
End Sub

Sub Application_OnEnd
End Sub
</SCRIPT>


注意本Global.asa中的Session_OnStart块不做任何事件。

因为一旦有用户访问服务器而不管用户是否登录,都会产生OnStart事件,而现在需要的只是登录用户的在线,所以不能在OnStart事件里使Application("online")加1。

又因为不管是否是登录用户的会话结束都会产生OnEnd事件(假如有访客访问了服务器但并不登录,他的会话结束后也会产生OnEnd

此新闻共有2页 上一页 1 2 下一页

推荐好友 | 频道收藏 | 打印文档 | 报告错误  
相关连接
·用AspJpeg调整文字水印透明,生成图片水印的效果
·替换DISTINCT的方法查找重复记录
·ASP入门进阶之Global.asa文件用法
·用AJAX技术来实现天气预报功能
·错误 8002801d 库没有注册
·FSO中的SubFolders 属性
·正则表达式的基本语法
·ASP生成静态Html文件技术杂谈
同一专题
·无相关专题
发表评论 版权声明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有
转载
要求转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。
共有评论查看评论
姓名: