频道直达 - 学院 - 下载 - 交易 - 截图 - 特效 - 字库 - 手册 - 排名-工具 - 繁體
设为首页
加入收藏
联系我们
建站搜索: 虚拟主机  域名注册   常用广告代码      用户注册 | 用户登陆
您当前的位置:中国建站之家 -> 网站开发 -> ASP -> 文章内容
精彩推荐
热门文章
· 注册码大全二
· 注册码大全四
· 注册码大全一
· 通过google 赶快来赚..
· [图文] 头像-qq头像(..
· 要10G免费网络硬盘的..
· 注册码大全三
· 注册码大全十
· [图文] 梦幻背景图片..
· [图文] 卡通动物图片..
相关文章
· 什么才是提高ASP性能的最..
· CSS语法手册(四)文本填..
· 一个用数据库的php二级联..
· 做个卡通版的小白鸽MM贺..
· SQL Server数据库技术(..
· VBSctipt 5.0中的新特性..
· Photoshop路径终极教程(..
· 将ASP代码移植为VB COM组..
· 李开复指责同行盈利模式..
· Sql server使用内存限定..
ASP编程入门进阶(十):Global.asa文件
作者:未知  来源:转载  发布时间:2005-7-26 9:05:59  发布人:acx

减小字体 增大字体

我们已经知道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" thensession.Abandon()response.endend 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" thensession.Abandon()response.endend 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_OnStartapplication("online")=0End SubSub Session_OnStartEnd SubSub Session_OnEnd if session.contents("pass") then ''判断是否为登录用户的Session_OnEnd application.lock application("online")=application("online")-1 application.unlock end ifEnd SubSub Application_OnEndEnd Sub</script>
  因为一旦有用户访问服务器而不管用户是否登录,都会产生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" thensession.Abandon()end ifsubmitname=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 ifapplication.lockapplication("online")=application("online")+1application.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远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧:)


[打 印]
[] [返回上一页] [收 藏]
∷相关文章评论∷    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
关于本站 - 网站帮助 - 广告合作 - 下载声明 - 友情连接 - 网站地图 - 人才招聘
网站合作、内容监督、商务咨询:QQ: 9576619
Copyright ? 2005--2008 中国建站之家版权所有
未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
免责申明:中国建站之家(www.jz123.cn)上的所有提供下载的软件和资源
均来源于网络,为软件或程序作者提供和网友推荐收集整理而来,仅供学习
和研究使用。如有侵犯你的版权,请立即联系我们,本站将在3个工作日内删除。
粤ICP备05092265号