Application和Session均有事件Start和End,分别在应用程序的初始运行和终结以及用户会话的初试运行和终结时触发。
那么,在哪里定义这两个对象的事件呢,在IIS中规定了,你需要在站点的根目录下创建一个名为global.asa的文件,并在这个文件中来创建Application对象和Sessin对象的事件。
Global.asa文件中应当包含4个Sub过程,并且他们的名字是固定的,这样IIS在处理ASP脚本时,就可以自动的执行这些过程了,一个标准的global.asa文件的代码结构如下:
<script language="vbscript" runat="server">
Sub Application_onStart()
End Sub
Sub Application_onEnd()
End Sub
Sub Session_onStart()
End Sub
Sub Session_onEnd()
End Sub
</script>
首先请注意,这里并不是以<%%>定界符来包含代码,而是以script标签来包含相应的代码,否则会出现错误。
这里的Application_onStart()过程在整个网站被第一次开启时触发,这是什么意思呢,当站点启动后,有用户请求访问了这个站点的文件,此时Application_onStart()过程即被触发,而且先执行完毕这个过程,而后才处理用户的请求。
Application_onEnd()过程在站点被关闭时触发。这个关闭可能是管理员在IIS管理器中对站点进行关闭操作,也可能是服务器的正常关机或者重启。
Session_onStart()过程在每个用户第一次访问网站时触发,结合前面的讲解,也就是在IIS为用户分配SessionID时触发。
Session_onEnd()过程在每个用户的Session过期时触发,这与Session.Timeout的设定有关,假如Session.Timeout设定的时间为10分钟,那么在用户10分钟没有与服务器发生任何交互的动作后,用户的Session将被放弃,此时Session_onEnd()过程也会被触发。
本节中,我们利用global.asa文件中Session的事件特性来制作一个在线人数计数器,在每个用户第一次访问站点时,我们会将application中保存的当前在线人数增加一,当用户离开此站点并且Session超时后,我们会将application中保存的在线人数减去一。
首先来看实现此功能的global.asa文件的源代码:
<script language="vbscript" runat="server">
Sub Application_onStart()
End Sub
Sub Application_onEnd()
End Sub
Sub Session_onStart()
If Application("onlinePeople") = "" Then
Application.Lock()
Application("onlinePeople") = 1
Application.UnLock()
Else
Application.Lock()
Application("onlinePeople") = Application("onlinePeople") + 1
Application.UnLock()
End If
End Sub
Sub Session_onEnd()
Application.Lock()
If Application("onlinePeople") >=1 Then
Application("onlinePeople") = Application("onlinePeople") - 1
End If
Application.UnLock()
End Sub
</script>
这里我们主要用到的是Session_onStart()和Session_onEnd()两个事件。
在Session_onStart()事件中,我们首先对名为onlinePeople的Application变量进行了判断,如果他的值为空,那么说明此时计数还没有被访问,此时就设定负责计数的Application变量的值为1,否则就为该Application变量的值加一。当然,此处你也可以在Application_onStart()事件中加入代码,使得在网站开启时就自动的初始化Application("onlinePeople")的值为1。
在Session_onEnd()事件中,我们首先对名为onlinePeople的Application变量进行了检测,如果他的值小于或者等于1时,才将其减去一,否则不进行任何操作,这是为了防止出现负数在线人数。当然,根据程序设计的原理,这种情况一般不会出现。
将这个文件保存为global.asa,并放在站点根目录时,你即可对站点的在线人数进行统计,在ASP文件中,你可以使用<%=Response.Write(Application("onlinePeople"))%>来输出当前的在线人数。
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛