手机
当前位置:查字典教程网 >编程开发 >ASP教程 >asp实现一个统计当前在线用户的解决方案
asp实现一个统计当前在线用户的解决方案
摘要:一个统计当前在线用户的解决方案在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客...

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

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

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

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

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

主要实现方法为:

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

表名:online

header.asp↓

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

<%

......

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

rs.open"select*fromonline",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'设置用户的资料已经存入数据库,表示已经在线

endif

ifsession("s_name")<>""then'如果用户已经通过登录框登录

rs.open"select*fromonlinewhereid='"&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

endif

......

%>

......

<head>

......

<scriptlanguage=javascript>

functionTest()

{

varxmlhttp=newActiveXObject("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"selectttfromonlinewhereid='"&session.sessionID&"'",conn,3,3

rs("tt")=now()'更新当前在线用户的在线时间

rs.update

rs.close

rs.open"deletefromonlinewheredatediff('s',tt,now())>60",conn,3,1'删除超时用户

%>

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

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

本方案在WIN2000+SQLServer2000上调试通过,由于本方案对系统要求比较大,期待其他朋友拿出更好的方案,一起解决这个问题!

【asp实现一个统计当前在线用户的解决方案】相关文章:

ASP获取新增记录ID值的方法

ASP简洁的多重查询的解决方案

asp获取用户真实IP地址的方法

asp实现无限级分类的方法js版

asp数个使用技巧

ASP代码实现301重定向及带参数的方法

ASP中js左侧多级菜单动态的解决方案

ASP出现不能打开注册表关键字的解决教程

在ASP中用组件检测当前网卡地址的代码

Session对象失效的客户端解决方法

精品推荐
分类导航