Global.asa文件技巧用法
2020-02-05 16:00:25来源:爱站网 阅读 ()
global.asa文件是可选文件之一,然而它既包含对象、变量和方法的声明,上文是爱站技术频道小编带给大家的Global.asa文件技巧用法,一起跟着小编的步伐来了解吧!
Global.asa文件技巧用法大家都了解吗?
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远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧。
看完爱站技术频道小编介绍的Global.asa文件技巧用法,你学会了吗?希望js.aizhan.com把更多知识带给大家。
原文链接:https://js.aizhan.com/develop/asp/11361.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:asp控制xml数据库的经典代码
下一篇:asp万用分页程序代码
- asp数个使用技巧 2020-03-20
- 用asp实现检测文件编码 2020-03-20
- ASP编码优化技巧8则 2020-03-20
- ASP提速技巧 推荐 2020-03-20
- ASP调用存储过程的技巧 2020-03-20
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash