ASP的Global.asa文件技巧用法_应用技巧

我们都知道,.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.jb51.net)
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

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

4、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")。

5、login.asp

当前注册会员<%=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远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧。

希望通过本文关于Global.asa文件技巧的介绍,能给你带来帮助。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp
Global.asa
asp global.asa、asp global.asa error、global.asa、global.asa 不执行、global.asa 挂马,以便于您获取更多的相关知识。

时间: 2024-09-20 05:53:59

ASP的Global.asa文件技巧用法_应用技巧的相关文章

ASP的Global.asa文件技巧用法

我们都知道,.asa是文件后缀名.是Active Server Application的首字母缩写. 它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象.该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象.该文件必须存放在应用程序的根目录内.每个应用程序只能有一个Global.asa文件. 关于Global.asa文件最常见的错误概念是它能为一般的使用的函数和子程序用作书库.Global.asa文件仅能用于创建对象的引用

Global.asa文件技巧用法_应用技巧

Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application.Session.我们都知道,.asa是文件后缀名.是Active Server Application的首字母缩写 它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象.该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象.该文件必须存放在应用程序的根目录内.每个应用程序只能有一个Global.asa文件. 关于Global.asa文件

asp.net控件DataList分页用法_实用技巧

本文实例讲述了asp.net控件DataList分页用法.分享给大家供大家参考,具体如下: protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["Page"] = 0; Bangding(); } } //绑定数据 public void Bangding() { PagedDataSource pds = new PagedDataSource(); pds.DataS

ASP.NET批量下载文件的方法_实用技巧

本文实例讲述了ASP.NET批量下载文件的方法.分享给大家供大家参考.具体方法如下: 一.实现步骤 在用户操作界面,由用户选择需要下载的文件,系统根据所选文件,在服务器上创建用于存储所选文件的临时文件夹,将所选文件拷贝至临时文件夹.然后调用 RAR程序,对临时文件夹进行压缩,然后输出到客户端.最后删除临时文件夹.  二.代码实现 1.ASP.NET批量下载 核心代码 复制代码 代码如下: //遍历服务器指定文件夹下的所有文件 string path = "uploads/Image/"

asp.net ajaxControlToolkit ValidatorCalloutExtender的简单用法_实用技巧

此控件是asp.net中的验证控件 RequiredFieldValidator , RangeValidator, RegularExpressionValidator, CompareValidator, CustomValidator,ValidationSummary的错误验证信息呼出的一个扩展控件 主要作用是把未通过验证的信息通过一个突出的层显示给用户. 主要属性: <ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCallou

用实现ASP批量删除目录及文件的代码_应用技巧

函数过程: 复制代码 代码如下: <%  'del.asp  dim fso,tmpfolder,tmpsubfolder,tmpfile,tmpfiles  set fso=server.CreateObject("Scripting.FileSystemObject")  sub delfolder(sPath)      If (fso.FolderExists(server.MapPath (sPath))) then          set tmpfolder=fso

小论asp中request与response的用法_应用技巧

request的用法: request有三种获取表单值的方法,分别用于不同的表单递交方法的获取.表单简单地可以认为是指页面所要传递的参数的一个集合,而其递交的方法有两个post和get.在这两种方法里面,分别对应着不同的接收方法,其具体的实现如下: 1.对于post方法递交的表单的获取值方法,运用request的form属性的get方法获取所要字段标识.例如,获取提交表单中的txtUserName的值放到字符串usrName中的代码如下,string userName=Request.Form.

asp.net ajaxControlToolkit FilteredTextBoxExtender的简单用法_实用技巧

验证控件的作用是如果输入的信息不符合,给用户相关的提示,儿这个文本过滤控件的好处是直接不给用户输入错误信息的机会 FilteredTextBoxExtender的一些属性: 1, TargetControlID:用来设置要控制的文本框. 2, FilterType:设置被过滤的类型,提供如下四种: Custom:如果选择这个选项,就可以在另外的一个属性中自定义不被过滤的字符 Numbers:让关联的文本框只能输入数字. UppercaseLetters:让关联的文本框只能输入大写字母. Lowe

asp入门教程:ASP applocation 全局变量与 Global.asa 文件

asp入门教程:ASP 全局变量 Global.asa 文件 Global.asa文件是一个可选文件,可以包含申报的对象,变量和方法,可以通过在每一页的ASP应用程序. -------------------------------------------------- ------------------------------ Global.asa文件 Global.asa文件是一个可选文件,可以包含申报的对象,变量和方法,可以通过在每一页的ASP应用程序.所有有效的浏览器的脚本( Java