主题:  asp实现在线人数的统计

5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
#12001/11/10 12:09:47
前两天有网友问到这个问题,我这里来回答一下。

从逻辑上说,这个问题很简单。那就是来一个用户,在线人数加一,离开一个用户,在线人数减一。

现在首先需要解决的问题是如何知道用户的进入和增加。

在asp中,用户进入访问页面的时候,会触发一个事情,事件名称是session_onstart,在离开的时候(准确地说,是在一定的时间内没有访问页面数据,缺省的时间是20分钟),也会触发一个事件,事件的名称是session_onend。我们可以在global.asa文件中定义这两个事件所执行的操作。

接下来我们需要考虑的问题是,如何让这个变量对于所有的人都是一样的(废话,不一样那一定不准确)。因此,我们首先想到的就是把在线人数放在一个application变量里。

到这里,我们需要解决的问题都已经解决了,下面来看看代码:
sub session_onstart
    application.lock
    application("onlineusers")=application("onlineusers")+1
    application.unlock
end sub

sub session_onend
    application.lock
    application("onlineusers")=application("onlineusers")-1
    application.unlock
end sub
在这里有一个小小的问题,那就是,如果用户是第一个访问者,由于在线人数变量没有初始化,所以会出现错误的提示。要想解决这个问题,我们需要加上初始化该变量的代码:
if isempty(application("onlineusers")) then
application("onlineusers")=1
end if
修改后的代码如下:
sub session_onstart
    application.lock
if isempty(application("onlineusers")) then
application("onlineusers")=1
else
application("onlineusers")=application("onlineusers")+1
end if
    application.unlock
end sub

sub session_onend
    application.lock
    application("onlineusers")=application("onlineusers")-1
    application.unlock
end sub
把上面的代码保存为global.asa,保存在web应用程序根目录下(必须在根目录下),然后在页面的合适位置中使用<%=application("onlineusers")%>就可以了。

编辑历史:[这消息被wincheer编辑过(编辑时间2001-11-10 12:12:31)]


绿茶

职务:普通成员
等级:8
金币:10.0
发贴:19267
#22001/11/11 15:21:29
还有一点,就是建立一个文件来存储这个计数值,否则服务器一关,就清零了



5D荣誉斑竹

职务:普通成员
等级:2
金币:1.0
发贴:343
#32001/11/12 13:18:43
在线人数没有必要使用文件来存储,因为这不是访问总数。
就算是服务器关了,在线人数当然也就没有了。这时候本来就是零