<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart
application("online")=0
End Sub
Sub Session_OnStart
End Sub
Sub Session_OnEnd
if session.contents("pass") then '判断是否为登录用户的Session_OnEnd
application.lock
application("online")=application("online")-1
application.unlock
end if
End Sub
Sub Application_OnEnd
End Sub
</SCRIPT>
注意本Global.asa中的Session_OnStart块不做任何事件。
因为一旦有用户访问服务器而不管用户是否登录,都会产生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" then session.Abandon() end if submitname=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 if application.lock application("online")=application("online")+1 application.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远远不止这些。不过我们现在先不着急全部掌握,当我们接触到数据库的时候再返回过来看,继续研究该文件,相信到那时一定又会感悟到很多。所以,还是先把上面的这些吃透吧:)









