首页 >> 读书频道 >> 电脑 >> 一个统计当前在线用户的解决方案
 
· 无组件实现文件上传/下载
· 浅谈TeeChart组件
· ASP操作XML文件的完
· 用ASP学做一个在线调查
· 金额大小写转换的asp完
· 纯ASP(VBscrip
· 实现有管理功能的ASP留
· ASP导出Excel数据
· 利用ASP打造网站论坛D
· ASP实现语音分时问候
· ASP中DLL的调试环境
· ASP图形计数器设计详解
 
· 美容养颜手册
· 加油金顺剧情分集介绍完整
· 红楼梦:120回全本[清
· 素质教育在美国
· 全唐诗卷四十六
· 韩剧《布拉格恋人》剧情介
· 夜航船[作者:明·张岱]
· 局外人[作者:韩·可爱淘
· 现场流行病学
· 源氏物语[日本:紫式部]
· 武林寓言故事
· 2006高考录取规则
 
· (出租)中动商场部分及写
· (出租)中动动漫基地&#
· 喜剧学院
· 《善德女王》剧情介绍
· 魔女18号 剧情
· 丑女无敌剧情介绍
· 魔女幼熙剧情介绍
· 龙游天下剧情介绍
· 震撼世界的七日剧情介绍
· 静静的白桦林剧情介绍
· 心情日记—老公今天我想对
· 旗舰剧情介绍
欢迎来到月影社区!如果您觉得这里不错,请推荐给您的朋友们。月影社区:http://wf66.com/

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


查看有无更新版本

关键字:ASP实例 2006-9-10

 

在做一个在线交流的网站时,有个问题很令我头疼,就是关于实时统计在线用户的问题,客户要求:统计当前在线人数、游客人数、会员人数、在线用户列表,包括游客、会员和管理员(如果是游客,则自动生成游客的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人的失误。

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

[ 1 ]
一个统计当前在线用户的解决方案 num

打印本页 关闭

关于我们版权声明本站导航友情连结作品演示 TOP↑