ASP编程入门进阶(十):Global.asa文件

我们已经知道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("htp://www.cnbruce.com/")
End Sub
</SCRIPT>


然后调试当前虚拟目录下的任何文件,你会发现所有页面都跳转向htp://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事件里使Applicaiton("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远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧:)

(0)

相关推荐

  • ASP的Global.asa文件技巧用法

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

  • ASP.NET Global.asax应用程序文件简介

    你可以使用这个文件实现应用程序安全性以及其它一些任务.下面让我们详细看一下如何在应用程序开发工作中使用这个文件. 概述 Global.asax 位于应用程序根目录下.虽然 Visual Studio .NET 会自动插入这个文件到所有的 ASP.NET 项目中,但是它实际上是一个可选文件.删除它不会出问题--当然是在你没有使用它的情况下..asax 文件扩展名指出它是一个应用程序文件,而不是一个使用 aspx 的 ASP.NET 文件. Global.asax 文件被配置为任何(通过 URL 的

  • ASP的Global.asa使用说明

    /*-------------------ASP文档参考集-----------------------*/ *-->作者:草履虫 *-->时间:2007-4.28---2007-4.30(原来是自己编写的手册,现在发在这里) *-->联系:caolvchong@gmail.com *-->文档功能: 1.复习了ASP,加深了对ASP结构的理解和ASP的体会 2.可以用来做ASP参考,自己写的,参考起来更方便 这是第四部分:Global.asa /*----------------

  • ASP基础入门第九篇(Global.asa文件的使用)

    下面我来向大家介绍 Global.asa 文件的使用方法. 什么是 Global.asa 文件?它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并声明具有会话和应用程序作用域的对象.该文件的内容不是用来给用户显示的,而是用来存储事件信息和由应用程序全局使用的对象.该文件的名称必须是 Global.asa 且必须存放在应用程序的根目录中.每个应用程序只能有一个 Global.asa 文件. 在 Global.asa 文件中,如果包含的脚本没有用 < SCRIPT> 标记封装,或定义的

  • ASP.net全局程序文件Global.asax用法分析

    本文详细讲述了ASP.net全局程序文件Global.asax用法,分享给大家供大家参考.具体分析如下: 一般来说ASP.NET应用程序只能有一个Global.asax文件,该文件支持许多项.具体分析如下: •Application_Start:在应用程序接收到第一个请求时调用,这是在应用程序中给应用程序级的变量赋值或指定对所有用户必须保持的状态的理想位置. •  Session_Start:类似于Application_Start事件,但这个事件在用户第一次访问应用程序时调用.例如,Appli

  • ASP编程入门进阶(十四):Browser & Linking

    一.Browser Capabilities组件 该组件最主要的作用是:提取识别客户端浏览器的版本信息. 其原理是这样的:当客户端浏览器向服务器发送页面请求时,同时会自动发送一个User Agent HTTP标题,而该标题是一个声明浏览器及其版本的 ASCII 字符串.而Browser Capabilities组件就将User Agent映射到在文件Browscap.ini中所注明的浏览器 , 并通过BrowserType对象的属性来识别客户浏览器. 若该对象在 browscap.ini 文件中

  • ASP编程入门进阶(一):安装配置服务器

    本人的水平有限,难免有疏忽遗漏之处,还望大家批评指正,在此先谢过. ASP编程入门进阶(一):安装配置服务器 鉴于ASP脚本语言是在服务器端IIS或PWS中解释和运行,并可动态生成普通的HTML网页,然后再传送到客户端供浏览的这一特点.我们要在本机上进行调试,那就要求我们的个人电脑具有服务器的功能. 不要看到"服务器"三个字就感到担心:我的机子配置这么底,性能这么差,是不是不能配啊.放心!配个服务器,就是多装个软件,况且就自己一个人用,根本没有必要多虑.那具体的装个什么软件呢?刚才我们

  • ASP编程入门进阶(十三):Ad & Content Rotator

    ASP的强大不仅仅局限于接受和显示的交互,更多的是运用ActiveX 组件进行更强大的Web应用. 那究竟ActiveX组件为何物?它又是如何运作的呢?其实ActiveX Server Components(ActiveX 服务器组件)是一个存在于 WEB 服务器上的文件,该文件包含执行某项或一组任务的代码,组件可以执行公用任务,这样就不必自己去创建执行这些任务的代码.很形象的一句话:运用组件直接采用别人经典的功能强大的程序.只不过这程序已被封装了的. 那具体ActiveX组件是如何产生.如何得

  • ASP编程入门进阶(十):Global.asa文件

    我们已经知道Application和Session对象的OnStart.OnEnd事件的脚本,都必须是在 Global.asa 文件中声明的.那究竟Global.asa是什么样的一个文件?它的作用有何?又该如何运用呢?且听我慢慢道来. 首先.asa是文件后缀名,它是Active Server Application的首字母缩写.Global.asa文件可以管理在ASP应用中两个非常苛刻的对象:Application.Session. 它其实是一个可选文件,程序编写者可以在该文件中指定事件脚本,并

  • ASP编程入门进阶(九):内置对象Application

    在Web应用程序中,当一个用户访问该应用时,Session类型的变量可以供这个用户在该Web应用的所有页面中共享数据:如果另一个用户也同时访问该Web应用,他也拥有自己的Session变量,但两个用户之间无法通过Session变量共享信息,而Application类型的变量则可以实现站点多个用户之间在所有页面中共享信息.可以理解Session是局部变量,而Application则为全局变量. 在同一虚拟目录及其子目录下的所有 .asp 文件构成了 ASP 应用程序.我们非但可以使用 Applic

  • ASP编程入门进阶(八):内置对象Session

    ASP对象中除了用于发送(Response).接收和处理数据(requeest).服务器访问(Server)的对象外,还有一些非常实用的标记Active Server应用程序(Application)和单个用户信息(Session)的对象. Session对象该对象在ASP使用中占相当大的比例.由于网页是一种无状态程序,无法得知用户浏览状态.在ASP中,通过Session对象来记录使用者私有的数据变量,以作为用户再次对服务器提出要求时做确认,用户在程序的Web页面之间跳转时,存在Session对

  • ASP编程入门进阶(十八):FSO组件之文件操作(上)

    FSO中除了可以对驱动器.文件夹的操作以外,功能最强大的就是对文件的操作了.它可以用来记数.内容管理.搜索还可生成动态HTML页面等等. 一.fso.OpenTextFile无需多说,fso.OpenTextFile就是打开某个文件了,一般情况之下是打开的txt文本文件.所以首先我们先建立一个txt文件,然后通过FSO来读取其中的内容. 1,info.txt name:cnbrucesex:male 建立了该文件,下面再做个ASP页面,当然最好两个文件是在同一目录下. 2,opentxt.asp

  • ASP编程入门进阶(十九):ASP技巧累加(二)

    严格控制Session 可以将不需要Session的内容(比如帮助画面,访问者区域,等等)移动到关闭Session的独立ASP应用程序中.在基础页面上,可以给ASP一个指示,让它不需要使用Session.将下面的代码直接加入到ASP页面的头部: <%@EnableSessionState=False%> 在Web服务器上缓存经常使用的数据 典型的情况是:ASP页面从后台存储中取回数据,然后以超文本标记语言(HTML)的形式形成结果.不管数据库的速度如何,从内存中取回数据要比从后台存储设备中快得

  • ASP编程入门进阶(十五):组件Counters

    该组件用于创建一个或多个计数器,这些计数器用于跟踪某一网页或某一网站访问次数的信息.你只能创建一个计数器组件,但该组件可以有多于一个的计数器. 一旦创建了计数器,它将一直持续下去直到被删除为止. 计数器不会在一个事件比如访问一页时自动增加.你必须使用Set和Increment方法人工的设置或增长计数器. 计数器不受作用域限制.一旦创建了一个计数器,那么站点上的任何页都可以检索和控制它的值. 一.Counters.Set & Counters.GetCounters.Set主要用来设置记数初始值,

  • ASP编程入门进阶(十七):FSO组件之文件夹操作

    操作完驱动器,接着就是来操作文件夹了.其中包括:提取文件夹信息.创建文件夹.删除文件夹.复制文件夹.移动文件夹等.下面就具体来看. 一.fso.GetFolder一看就明白,是提取文件夹了.那具体是提取哪个文件夹呢?后面肯定要跟一个文件夹的路径.提取出来了再来显示该文件夹相关信息呢?是不是有要具体提取下去.所以,看程序:1,getfldr.asp <%Set fso = CreateObject("Scripting.FileSystemObject")Set fldr = fs

随机推荐