网络编程
位置:首页>> 网络编程>> Asp编程>> 一个统计当前在线用户的解决方案

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

  发布时间:2007-10-13 19:27:00 

标签:统计,在线,在线人数,session

在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的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上调试通过,由于本方案对系统要求比较大,期待其他朋友拿出更好的方案,一起解决这个问题!

相关文章推荐:

asp实现通过session来统计在线人数的方法

使用IP地址来统计在线人数方法

0
投稿

猜你喜欢

  • 看了山人表单验证,又看了其他一些验证程序和相关的一些参考资料,写出了一个比较简洁的js表单验证程序。特点是扩展容易,可以方便的添加自己需要的
  • 雅虎的BrowserPlus在曝光了N久后终于发布了,一款类似于Google Gears的浏览器增强插件。在支持的操作系统方面,Gears明
  • 代码如下:<% '=================================================
  • 以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila FF1. document.form.item 问题
  • 使用xmlhttp中的getResponseHeader 从响应信息中获取指定的http头strValue = oXML
  • 数学是优美的. 听上去有点奇怪? 当我第一次开始设计的时候,我确信如此。数学如此刻板乏味。你可能会惊讶的发现,最美观的设计,艺术作品,物体,
  • 4. 选择最有效率的表名顺序(只在基于规则的优化器中有效)ORACLE的解析器按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中
  • 本程序有两文件test.asp 和tree.asp 还有一些图标文件   1。test.asp 调用类生成树 代码如下<%@
  • 平时我们获取事件对象一般写法如下:function getEvent(event) {    return e
  • 在Internet上我们每天都会遇到数不清的表单,也看到其中大部分并没有限制用户多次提交同一个表单。缺乏这种限制有时候会产生某些预料不到的结
  • CSS2.1 中规定了关于 CSS 规则 Specificity(特异性)的计算方式,用一个四位的数字串(注:CSS2 中是用三位)来表示,
  • 一、分工和流程在土豆网,以项目开发为核心,谁都可以带项目,担任项目经理。一个典型的土豆网项目中,当进入正式开发阶段,通常参与者包括:1名设计
  • 对很多从事产品工作的同事来说,“以用户为中心”是工作的重点,同时也是难点。用户的心思难以捉摸,用户研究的工作也似乎高深莫测。不过,用户研究并
  • 你是否对获得MySQL改变字符集的实际操作感到十分头疼?不用急,以下的文章将会给你正确的解答方案,以下的文章主要是介绍获得MySQL改变字符
  • 在计算机中数据有两种特征:类型和长度。所谓数据类型就是以数据的表现方式和存储方式来划分的数据的种类。在SQL Server 中每个变量、参数
  •  这可是个综合性的问题,看看下面对文件操作的集大成代码:<% 'Set file i/
  • 一旦你已经为MySQL实例管理器设置了一个密码文件并且IM正在运行,你可以连接它。你可以使用mysql客户端工具通过标准MySQL API来
  • 有时在项目中会遇到通过在页面中采用iframe的方式include其它页面,这时就会考虑不要因出现滚动条而影响页面效果,但include页面
  • 在MySQL中,使用auto_increment类型的id字段作为表的主键,并用它作为其他表的外键,形成“主从表结构”,这是数据库设计中常见
  • 第一次写这类文章,有点儿紧张有点儿新奇有点儿痛苦,来CDC实习2个月啦,每天除了工作就是体验体验再体验,因为之前做了一些有关规范的工作,突然
手机版 网络编程 asp之家 www.aspxhome.com