asp实现一个统计当前在线用户的解决方案

ASP新手入门
一个统计当前在线用户的解决方案 

在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的ID,如果是会员,则显示会员姓名)。因为它要求有实时性,则首先我将用global.asa解决的想法pass掉。 

问题的关键是如何判断用户已经离开,和当用户离开时如何执行一个文件或一个函数。 

经过和网上一些朋友的探讨,终于解决了这个问题。 

解决的原理为:编写一个通用页面,所谓的通用页面,就是应用里的每个页面都包含这个页面,例如:header.asp,在这个页面里,用XMLHTTP写一段代码,这段代码的作用是每隔10秒或20秒就向服务器发送一个请求,目的是更新当前用户的在线时间并删除在线时间超过一定时间的用户,使数据库中的在线用户记录保持一定的实时性。 

主要实现方法为: 

新建一数据库,字段名称分别为:id(字符),name(字符),user(数字)tt(日期),admin(权限代码,0-普通用户,1-管理员) 

表名:online 

header.asp ↓ 

============================================================ 

<% 

... ... 

if session("s_in")<>1 and session("s_name")="" then '如果用户是第一次登陆 

rs.open "select * from online",conn,3,3 
rs.addnew 
rs("id")=session.sessionID 
rs("name")="游客" & session.sessionID 
rs("user")=0 '0表示用户未登陆,是游客身份 
rs("tt")=now 
rs.update 
rs.close 
session("s_in")=1 '设置用户的资料已经存入数据库,表示已经在线 
end if 

if session("s_name")<>"" then '如果用户已经通过登录框登录 
rs.open "select * from online where id='" & session.sessionID & "'",conn,3,3 
rs("name")=session("s_name") 
rs("admin")=session("s_admin") '将用户的姓名更新为会员名称 
rs("user")=1 '表示用户已经登陆,是会员身份 
rs("tt")=now '将当前系统时间设置为用户的登陆时间 
rs.update 
rs.close 
end if 

... ... 

%> 

... ... 

<head> 

... ... 

<script language=javascript> 
function Test() 

var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); 
xmlhttp.open("POST","onceonline.asp",false); // 向onceonline.asp发送更新请求 
xmlhttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded"); 
xmlhttp.send(); 

setInterval("Test();",10); // 10秒钟发送一次更新请求 
</script> 

... ... 

</head> 

... ... 

========================================================== 

onceonline.asp 

<% 
rs.open "select tt from online where id='" & session.sessionID & "'",conn,3,3 
rs("tt")=now() '更新当前在线用户的在线时间 
rs.update 
rs.close 

rs.open "delete from online where datediff('s',tt,now())>60",conn,3,1 '删除超时用户 
%> 

============================================================== 

这样,基本保证了数据库中用户列表的实时性,误差取决于更新时间和删除时间的差值大小和服务器的处理速度,建议不要将删除超时用户的时间间隔取的过于小,那样有可能会导致在线用户0人的失误。

相关内容推荐

编写第一个ASP程序

现在有很多关于ASP编程的教程。其中有些是对于你有帮助,有些完全没有用。甚至有些写得是误人子弟。无论如何,你读过一些关于ASP的内容,现在你已经准备好构建第一个应用程序。

ASP表单输入到HTML

ASP能写.html或者任何其他的直接到web服务器的文档文本(你需要写文本输出到写权限的目录)。这是能够不需要上传PC的文件用户输入即时的发布信息。 下面的例子有四个输入区域(标

周的天数

想在asp显示当前一周有多少天吗?这个代码会把握住今天的值和利用到案例选择显示一周的天数。 % date_value = date() %%= date_value %br% dayofweek=weekday(date_value) %day number in week %= dayofweek %br%

asp获取IP地址的函数

FunctionGetIp() DimDulIp,ProIP DulIp=Request.ServerVariables("HTTP_X_FORWARDED_FOR") ProIP=Request.ServerVariables("REMOTE_ADDR") IfDulIp=""Then GetIp=ProIP Else GetIp=DulIp EndIf EndFunction

ASP-条件语句

有时,当我们写代码时,我们要为作出不同的决定而执行不同的操作。我们可以使用条件语句中的代码来做到这一点。条件语句是一套用于执行基于不同条件的不同动作的命令。 为了支

返回
顶部