[经验]渚薰的ASP畅谈(六)global.asa文件解惑☆☆☆
这今天留意了不少帖子,其中这两天在讨论一个问题,关于限制登录技术的处理。也有很多朋友发表了意见,大致上就是用一个online字段来分辨,此不在多说这个。关键是有人提出,当用户未正常注销的情况下,如何处理online字段的问题。针对这个问题,我补充一个小知识(可能许多初学asp甚至已经接触了相当时间的asp人员都会忽略的东西)-asp网站全局共享文件global.asa。再我回复的某个帖子中,有人误认为,这是一个表(这也难怪,后缀是asa……)。其实,这个文件是整个asp网站所共享拥有的文件,也可以所成是服务器检查整个asp网站配置的文件。首先,这个文件需放在网站根目录下,以gloabl.asa命名。
那么,这个文件到底有什么作用呢。这个文件里面一共有四个过程,而且只能有这么四个过程,分别是
<script language="VBScript" runat="Server">
Sub Application_OnStart
'TODO sth.
End Sub
Sub Application_OnEnd
'TODO sth.
End Sub
Sub Session_OnStart
'TODO sth.
End Sub
Sub Sessin_OnEnd
'TODO sth.
End Sub
</script>
那么这四个过程定义了有什么用呢,如下我们描述四个服务器状态
1、服务器启动初次运行该asp网站(开启服务器会话状态)
2、某用户打开浏览器,访问该asp网站(开启用户会话状态)
3、某用户关闭浏览器,结束一次对整个asp网站的浏览(关闭用户会话状态)
4、服务器关闭或结束该asp网站(关闭服务器会话状态)
这服务器状态所触发的事件就分别对应这四个过程
1、Application_OnStart
2、Session_OnStart
3、Session_OnEnd
4、Application_OnEnd
当服务器状态触发这四个过程的某一个过程时,就可以在这个过程里编写相应的代码,来实现一些特殊功能,举例
1、有些网站,当你第一次访问时,并不允许你访问除index.htm以外的页面,这个如何来做的呢?当用户第一次访问该网站时,触发Session_OnStart事件。在Session_OnStart过程里判断,当前用户浏览的网址是否为index.htm,如不是则跳转自index.htm
2、大家对Session应该很熟悉了,但我相信,极少人会去注意另一个会话变量,application。对于这两个会话级变量,我希望接触asp的朋友都能认真的去了解他们的特性(session是用户级会话变量,application是服务器级会话变量)。对于这些会话变量,我们都可以在四个过程中进行操作。比如,在Session_OnStart过程中,把Session("login")赋值为false等等,在Session_OnEnd过程中,显式释放Session变量,即Session.Abandon()。
3、最后一个例子回到最开始的主题,如何处理用户非正常注销的问题。针对Session_OnEnd事件的特性,即只要在Session_OnEnd过程里,处理用户离线(或退出的状态就可以了)。针对Session两个的事件,以及application的服务器变量特性,甚至可以不必用到数据库就能判断用户是否在线或离线,大致思路如下:
(1)用户初次访问网站时,分配一个ID号,在Session_OnStart事件中,设置Application(该用户ID号)=false,表示未登录状态。
(2)当用户登录时,在程序中置Application(该用户ID号)=true,表示该用户已经登录
(3)他人如果需要检查某人是否是在线状态,只要查看Application(该用户ID号)是否为true(为什么可以这样检查?因为application是服务器级变量,它保存在服务器端的内存中,是对所有用户可见的,即可理解成全局变量)
(4)当用户退出时,在程序中置Application(该用户ID号)=false
(5)当用户关闭浏览器,结束一次会话状态时,在Session_OnEnd过程中,再次置Application(该用户ID号)=false
对于这四个事件过程,以及两个会话变量,最后还是希望各位朋友能够仔细了解他们的特性,从中你会获得许多知识,并能想到解决一些本无法处理的技术问题