ASP基础之Global.asa文件技巧用法

作者:控件中国网   出处:互联网   2015-07-13 11:15:41   阅读:2

本文介绍的是ASP的基础知识,Global.asa文件技巧用法,希望对大家有帮助,一起来看。


 

Aspose.Total For .NET——正版、购买、下载、价格、销售、代理、授权、技术支持尽在控件中国网


 

 

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


 

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


 

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


 

Global.asa文件主要基于会话级事件被访问,在以下三种情况下被调用:


当Application_OnStart或Application_OnEnd事件被触发。
当Session_OnStart或Session_OnEnd事件被触发。
当引用一个在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.webjx.com/ )  End Sub  /SCRIPT  


 

 


 

然后调试当前虚拟目录下的任何文件,你会发现所有页面都跳转向http://www.webjx.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进行修改


 

 


 

 %  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了。


 

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事件),所以在Session_OnEnd事件里用了句if语句来判断是否为已登录用户的OnEnd事件,如果是才将在线人数减1。


 

并且值得注意的是:session.contents( pass )的使用,因为在OnEnd事件里禁止使用Session对象,但是可以用Session对象的集合来调用session变量。也就是说不能直接写session( pass ),而是需要写session.contents( pass )。


 

6,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( online )=application( online )+1  application.unlock  %  


 

当前注册会员 %=application( online )% 人。


 

 a href= login.asp?logout=true 退出 /a   %else%   form action= login.asp  method= post   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里将online设为1(如果有数据库则上传),但用户离线时将online设为0,要完善它,就要修改一下Session_OnEnd事件,在该事件里将online设为0(同样将为0的值上传)


 

当然,Global.asa远远不止这些。不过们现在先不着急全部掌握,当们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧。


 

希望通过本文的介绍,能带来帮助。

Aspose.Total For .NET——正版、购买、下载、价格、销售、代理、授权、技术支持尽在控件中国网


 

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat