<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进行修改
3,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了。
4,exit.asp
<%session.Abandon()%> <script> self.close() </script> |
当然,加了段Script脚本,目的是进行Session的注销以后立即进行关闭本身。
那现在基本一个在线统计的Web应用就可以了。
四、深入研究Global.asa
从上面的调试中,举一反三的你,一定会提出一个问题:如何控制注册用户在线人数?
那下面几个文件一个一个看: