|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
ASP脚本是采用明文(plaintext)方式来编写的。 我们已晓得Application和Session工具的OnStart、OnEnd事务的剧本,都必需是在Global.asa文件中声明的。那事实Global.asa是甚么样的一个文件?它的感化有何?又该怎样使用呢?且听我渐渐道来。
起首.asa是文件后缀名,它是ActiveServerApplication的首字母缩写。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的尺度文件格局以下:
<SCRIPTLANGUAGE="VBScript"RUNAT="Server">
SubApplication_OnStart
Application_OnStart当任何客户初次会见该使用程序的首页时运转
EndSub
SubSession_OnStart
Session_OnStart当客户初次运转ASP使用程序中的任何一个页面时运转
EndSub
SubSession_OnEnd
Session_OnEnd当一个客户的会话超时或加入使用程序时运转
EndSub
SubApplication_OnEnd
Application_OnEnd当该站点的WEB服务器封闭时运转
EndSub
</SCRIPT>
1、Session_onStart
先看一个把持用户进进页面的代码:
1,Global.asa(放在被调试的假造目次的根目次上面)
<SCRIPTLANGUAGE="VBScript"RUNAT="Server">
SubSession_OnStart只需是用户第一次登录本站,则会跳转到首页
response.redirect("http://www.webjx.com/")
EndSub
</SCRIPT>
然后调试以后假造目次下的任何文件,你会发明一切页面都跳转向http://www.webjx.com/<
经由过程此“强迫进进某页”的例子,能够设想当首页必要被存眷的时分长短常有需要的。
上面就以一个“在耳目数”的例子来持续察看Session_OnStart和Session_OnEnd事务
2、Session_onEnd
2,Global.asa(放在被调试的假造目次的根目次上面)
<SCRIPTLANGUAGE=VBScriptRUNAT=Server>
SubApplication_onStart初始值为0
Application("OnLine")=0
EndSub
SubSession_onStart一个用户会见举行记数加1
Application.Lock
Application("OnLine")=Application("OnLine")+1
Application.Unlock
EndSub
SubSession_OnEnd一个用户历程的停止,记数减1(P.S.假如没有该事务程序,则实行的就是页面会见程序了。)
Application.Lock
Application("OnLine")=Application("OnLine")-1
Application.Unlock
EndSub
</SCRIPT>
3,online.asp
<%
ifrequest.querystring("logout")="true"then
session.Abandon()
response.end
endif
%>
以后共有<%=Application("OnLine")%>在线
<ahref="online.asp?logout=true">加入</a>
你发明在该页中只要一个Application("OnLine"),并且仍是被显现援用的。那末其值来自何方?这恰是Global.asa文件的关头地点。你能够在本机顺次翻开个窗口,举行举行封闭窗口或加入两种办法的调试。
3、持续细化一下
下面的程序你会发明:当举行“加入”毗连后封闭窗口和间接封闭窗口效果是纷歧样的。由于Session存在工夫的原因,当间接举行封闭窗口,其实不能触发Session_OnEnd事务,以是该怎样完成这个几近不成能的设法呢?
人人都晓得,当网页举行封闭的时分能够连带一个onunload事务,那末该onunload只需能实行Session的刊出功效不就我们必要的吗?空话少说,将online.asp举行修正
3,online.asp
<%
ifrequest.querystring("logout")="true"then
session.Abandon()
response.end
endif
%>
<bodyonunload=javascript:window.open("exit.asp")>
以后共有<%=Application("OnLine")%>在线
<ahref="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使用就能够了。
4、深切研讨Global.asa
从下面的调试中,触类旁通的你,必定会提出一个成绩:怎样把持注册用户在耳目数?那上面几个文件一个一个看:
5,Global.asa(放在被调试的假造目次的根目次上面)
<SCRIPTLANGUAGE="VBScript"RUNAT="Server">
SubApplication_OnStart
application("online")=0
EndSub
SubSession_OnStart
EndSub
SubSession_OnEnd
ifsession.contents("pass")then判别是不是为登任命户的Session_OnEnd
application.lock
application("online")=application("online")-1
application.unlock
endif
EndSub
SubApplication_OnEnd
EndSub
</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
<%
ifrequest.querystring("logout")="true"then
session.Abandon()
endif
submitname=request.form("submit")
ifsubmitname="submit"then
name=request.form("name")
pwd=request.form("pwd")
ifname="cnbruce"andpwd="cnrose"then
session("name")=name
session("pass")=true
else
response.write"ErrorNameOrPwd.<ahref=login.asp>Back</a>"
response.end
endif
application.lock
application("online")=application("online")+1
application.unlock
%>
以后注册会员<%=application("online")%>人。
<ahref="login.asp?logout=true">加入</a>
<%else%>
<formaction="login.asp"method="post">
<inputtype="text"name="name"><br>
<inputtype="password"name="pwd"><br>
<inputtype="submit"name="submit"value="submit">
<%endif%>
只是复杂地检测用名是cnbruce,暗码是cnrose的时分,天生一个session("pass")=true,就是放在Global.asa中判别的。
五,持续发扬设想
想一想,再想一想。仅仅统计有几人在线是不敷的,还要判别用户的在线形态。
能够设想举措基础,当用户登录的时分,在login.asp里将online设为1(假如无数据库则上传),但用户离线时将online设为0,要完美它,就要修正一下Session_OnEnd事务,在该事务里将online设为0(一样将为0的值上传)……
固然,Global.asa远远不止这些。不外我们如今先不发急全体把握,当我们打仗到数据库的时分再前往过去看,持续研讨该文件,信任到当时必定又会感悟到良多。以是,仍是先把下面的这些吃透吧。
优点:简单易学、开发速度快、有很多年“历史”,能找到非常多别人做好的程序来用、配合activeX功能强大,很多php做不到的asp+activeX能做到,例如银行安全控件 |
|