你用ajax让在线用户每隔一定时间通知一次服务器,更新一次时间。判断用户是不是在线的时候,就看每个用户更新的这个时间戳,最后一个更新的时间超过你的设定时间,不就不在线了

解决方案 »

  1.   

    1。数据库中建一个“在线表”每个用户登录时先清除表中所有ID等于他的信息,再添加一条他当前登录信息。
    2。做个定时刷新,读取数据库信息。
    3。做成全屏模式,自定义一个“退出”按钮,关闭时在“在线表”中删除当前登录用户信息。
    4。屏蔽ALT + F4热键。
      

  2.   

    是否在线是一个时效问题,没有人要求那么精确,何必呢,多久没动作就判定不在线就好了   
             
                 
               
    --------------完美的签名线-----------------
    网页游戏开发第一站 http://dev.web863.com
      

  3.   


    ajax: <script language="JavaScript" type="text/JAVAscript"> 
    function aa(i) 

      document.form1.xxzz.value=i; 

    function checkregusername() 
      {   var XMLhttp; 
      try{xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");} 
        catch (e) 
      { 
        try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");} 
        catch (e) 
        { 
      try{xmlhttp=new XMLHttpRequest();} 
      catch(e) 
      { 
        var cs=document.getElementById("erroruname"); 
        cs.innerHTML=" <font color='#ff0000'>ddd </font>"; 
        } 
      } 
        }   XMLhttp.open("get","2.ASPx?n="+Math.random(),true); 
      XMLhttp.onreadystatechange=function() 
      { 
        if(XMLhttp.readyState==4) 
      { 
        if(XMLhttp.status==200) 
        { 
          if (XMLhttp.responseText=="xxxxx ") 
          { 
        msg="0000!"; 
          } 
      else 
      { 
        msg=XMLhttp.responseText; 
      }  
        } 
        else 
        { 
          msg="正在载入数据......."; 
        } 
        var cs=document.getElementById("erroruname"); 
        cs.innerHTML=msg; 
        diaoyong()//回调函数--------------------------//////////////////////////////////// 
      } 
      else 
      { 
        
      } 
      } 
      XMLhttp.send(null);  
      return false; 

    </script> <body> 
    <div id="erroruname"> <div> 
    //////============================================================
    <script> 
    function huidiao() 

      setTimeout("checkregusername()",60000) 

    setTimeout("checkregusername()",60000) 
    </script> 
    //////================================================================= 
    </body> 每格1分钟象2.ASPx提交一次数据      ok 
      

  4.   

    参考
    http://topic.csdn.net/t/20041208/13/3626050.html
      

  5.   

    或者可以建一个GLOBAL 放个定时器  然后设置一个用户在线的过期时间 和清理在线用户时间间隔
    然后在Application_Start里面启用程序启用的时候先删除所有在线的用户 然后在定时器到达时间间隔时Elapsed触发清理不在线的用户
    而判断用户是不是在线 可以在WEBCONFIG里面配置一个httpModules  在启用时就调用一个添加在线用户的方法
      

  6.   

    在数据库中设计两个字段存储时间
    一个是当前活动时间,另一个是最近一次访问时间
    用ajax去修改用户自己当前活动时间,然后再把所有用户记录的最近一次访问时间都修改为当前的时间
    这时候去访问在线用户时判断用户的这两个时间之间的差值是否小于20秒(这个值跟访问数据库或者是网速有关系)。
    当用户点击关闭浏览器后就不会更新用户的当前时间了,但是他的另一个时间点是被其他人去更新的
    所以这时候这两个时间点之差肯定是大于前面设计的20秒的。那表示它当前不在线。
      

  7.   


    通过ajax中或JS里定时器,定时查询用户是否在线,在线设置状态
    也可获取在线用户,保存在hashtable等里,再查询
      

  8.   

    用ajax吧,检查是否登陆!定时刷新
      

  9.   

    用户表建个字段recentLoginTime, 类型为时间, 用户每隔30秒刷新该字段, =当前时间. 当前用户人数, 每隔X秒刷一下, 取的是最近1分种内, recentLoginTime between 前一分钟 and 当前时间
      

  10.   

    至于如何AJAX刷新,那代码太多了. 用一下JQuery, 它的AJAX比较简单
      

  11.   

    想精确取的话,就只能定时的向数据库服务器发送数据.
      这样的话, 用户少不会出现问题..
      如果有8000个用户都在线, 那么 定时发送会不会照成你服务器的荡机 ?
      计算这么多其实没有必要.. 顶多记个上次登陆时间就够了. 往客户端发送段cookie;
      

  12.   

    用ajax让在线用户每隔一定时间通知一次服务器
      

  13.   

    用 membership API 简单