一个统计当前在线用户的解决方案
时间:2007-10-13 19:27:00
在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的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人的失误。
本方案在WIN2000+SQL Server2000上调试通过,由于本方案对系统要求比较大,期待其他朋友拿出更好的方案,一起解决这个问题!
相关文章推荐:
标签:统计,在线,在线人数,session
0
投稿
猜你喜欢
Centos7 下安装最新的python3.8
2023-04-29 14:44:13
微信小程序获取当前位置的详细步骤
2024-04-08 10:52:09
JAVA/JSP学习系列之一
2023-06-19 16:44:14
mysql 5.7.17 安装配置方法图文教程(ubuntu 16.04)
2024-01-17 20:39:43
学会python自动收发邮件 代替你问候女友
2023-07-08 17:01:49
ASP 循环导入导出数据处理 不使用缓存
2010-07-02 12:31:00
讲述SQL Server数据转换服务小妙招
2010-07-26 14:43:00
浅谈Mysql tinyint(1)与tinyint(4)的区别
2024-01-14 10:10:39
CSS技巧及常见问题列表
2008-04-06 14:00:00
Python图像滤波处理操作示例【基于ImageFilter类】
2021-10-31 16:47:20
初步解析Python中的yield函数的用法
2023-01-03 12:23:05
利用 Python 把小伙伴制作成表情包
2022-08-14 16:57:46
什么是UE,UED?
2008-07-24 13:26:00
MySQL limit分页大偏移量慢的原因及优化方案
2024-01-25 14:28:30
JavaScript编制留言簿程序代码第1/3页
2024-04-22 13:23:44
ant design中upload组件上传大文件,显示进度条进度的实例
2024-04-27 16:08:46
tensorflow 利用expand_dims和squeeze扩展和压缩tensor维度方式
2023-04-25 04:15:56
HTTP提交方式之PUT详细介绍及POST和PUT的区别
2022-08-21 16:23:44
js阻止浏览器默认行为的简单实例
2024-04-27 15:22:55
python实现飞机大战(面向过程)
2022-04-18 10:44:17