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

2016-01-29 17:49 6 1 收藏

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

【 tulaoshi.com - ASP 】

 

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

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

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

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

主要实现方法为:

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

表名:online

header.asp ↓

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

<%

... ...

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/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

... ...

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

%

... ...

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

<head

... ...

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

   <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

... ...

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

</head

... ...

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

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

onceonline.asp

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/asp/)

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

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

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

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

我的信箱:my5243@hotmail.com

我叫“积木”,欢迎你和我成为朋友!

 

来源:http://www.tulaoshi.com/n/20160129/1503089.html

延伸阅读
标签: ASP
以下是IE打印设置脚本  <script language="VBScript"          Dim hkey_root,hkey_path,hkey_key          hkey_root  = "HKEY_CURRENT_USER"          hkey_path = "\Software\Microsoft\Int...
标签: PHP
  前一段时间我接触到DEC Tru64 Unix 我在上面装了PHP+APACHE,可以用提供的mail函数始终不能正常发信,于是自编了一个函数,它利用UNIX下的管道和PHP的SOCK函数进行发信,经过实验非常驻成功,下面是此函数原代码。 function mymail($mto,$mcc,$msubject,$mbody) {   $from="webmaster@backhome.com.cn"; $sign =...
标签: Web开发
一、使用iframe,通过document.write产生历史 代码如下: !DOCTYPE html html head meta charset="utf-8"/ title0/title /head body input type="button" value="加1" onclick="add()" / div id="info" style="border:red 1px solid;width:200px;padding:10px;margin:5px;"0/div /body /html script src="history-0.1.js"/script ...
随着中小企业在我国的蓬勃发展,越来越多的网络服务器会逐步进入千千万万的中小企业,与此同时,很多大的企业、机构随着业务的扩充分支机构也不断增加,这些用户需要购置网络服务器来满足业务发展的需要。但是这些用户受企业状况、资金预算的限制往往无法购置价格昂贵的基于SCSI接口的网络服务器,他们通常会选择性能较差、无冗余支持的ID...
计算系统与信息网络不停顿的运行与连接即高可用性已成为各行业特别是要求实时行业业务运行的基本要求。 惠普凭借丰富的经验创制的HP NetServer为您提供当今市场上最完备的高可用性系列产品和最优质的服务,使您的关键业务应用程序能连续可靠地高效运转。惠普还与业界领先的软硬件供应商联袂,为优化您的业务环境提供最...

经验教程

681

收藏

42
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部