比如csdn那樣,在線時就顯示亮的,不在線的就顯示灰的。
這個在線狀態如何判斷?請教各位

解决方案 »

  1.   

    可以用cookie 这个cookie 不要写到客户端 硬盘上  让这个cookie 保留在内存 然后检查这个cookie 就可以判断 是否在线
      

  2.   

    也可以参考这办法1.   
      用Application会好些吧,Cookie在客户端存储统计实现起来比较麻烦.   
      简单的说:   
      Application["x"];   
      只要赋了值,如:   Application["x"];   则甲和已可以共享到此值,可以用于计数器,记录站点访问量   
      只要一个用户登录,则Application["x"]   +=   1;//加一个数,表示有个新用户刚刚登录   
      2.   
      单独建一张表,字段有:登录时间,退出时间等.用数据库进行记录.   
        用户上线时,在Global   文件的Session_Begin事件中可以统计
      

  3.   

    方法太多了,Cookie、Session、Application、Cache、持久到数据库等等,只要你在用户登录时把他的状态记录下来,就可以取得,不论用什么方式什么技术。
      

  4.   

    KeyWord:   在线   用户   列表       
      当用户访问网站时,会为他分配一个SessionID。令用户的IP地址和用户名称建立一个一一对应的关系。如果用户开启了新的窗口,则检查用户的IP地址或用户名是否已经在OnlineUsersHash中出现过?如果出现过,就让新的SessionID指向现有的IP地址。而当一个Session结束时,则将该SessionID从OnlineUsers_SessionIPHash中移除。判断是否还有其他SessionID指向这个IP地址,如果没有,那么从在线用户列表中移除用户名称。客户端的情况相当复杂,必须要考虑周全。下面则是新的算法的代码:   
        
      //   在Global.asax.cs   文件中   
      //   
      //   在线用户列表主键名   
      public   const   string   KEY_ONLINEUSERS="OnlineUsers";   
      //   在线用户列表   Session   表主键名   
      public   const   string   KEY_ONLINEUSERS_SESSIONIP="OnlineUsers_SessionIP";   
        
      protected   void   Application_Start(Object   sender,   EventArgs   e)   
      {   
      Application.Lock();   
        
      Application[KEY_ONLINEUSERS]=null;   
      Application[KEY_ONLINEUSERS_SESSIONIP]=null; //   目的是将用户的SessionID和IP对应起来   
        
      Application.UnLock();   
      }   
          
      protected   void   Session_Start(Object   sender,   EventArgs   e)   
      {   
      Application.Lock();   
        
      /*   ...   */   
        
      Hashtable   onlineUsersHash=(Hashtable)Application[KEY_ONLINEUSERS];   
      Hashtable   onlineUsersSessionIPHash=(Hashtable)Application[KEY_ONLINEUSERS_SESSIONIP];   
        
      if(Visitor.Current.IsGuest) //   如果用户是来宾   
      {   
      if(onlineUsersHash.ContainsKey(Request.UserHostAddress))   
      {   
      onlineUsersHash[Request.UserHostAddress]="";   
      }   
      else   
      {   
      onlineUsersHash.Add(Request.UserHostAddress,   "");   
      }   
      }   
      else   
      {   
      if(!onlineUsersHash.ContainsKey(Request.UserHostAddress)   
      &&   !onlineUsersHash.ContainsValue(Visitor.Current.UserName))   
      {   
      //   如果用户的   IP   地址和用户名称在列表中找不到,则将添加在线用户列表中   
      onlineUsersHash.Add(Request.UserHostAddress,   Request.Cookies[″UserName″].Value);   
      }   
      else   if(onlineUsersHash.ContainsValue(Request.Cookies[“UserName”].Value))   
      {   
      //   如果用户的   Cookie   信息能够找到,则更新(先删除再添加)在线用户的   IP   地址   
      //   
      //   说明:用户可能刚登陆不久,便因为线路故障,断线并重新拨号   
      //   而当用户回到网站时,用户的   Cookie   还未过期,但是   IP   地址却发生了改变   
      string   userName=Request.Cookies[″UserName″].Value;   
        
      foreach(object   key   in   onlineUsersHash.Keys)   
      {   
      if(((string)onlineUsersHash[key]).Equals(userName))   
      {   
      //   删除用户刚才使用过的   IP   地址   
      onlineUsersHash.Remove(key);   
      break;   
      }   
      }   
        
      //   添加在线用户   
      onlineUsersHash.Add(Request.UserHostAddress,   Request.Cookies[″UserName″].Value);   
      }   
      else   if(onlineUsersHash.ContainsKey(Request.UserHostAddress))   
      {   
      //   如果用户的   IP   地址能找到,则更新在线用户的名称   
      //   
      //   说明:用户登录后,注销并重新登陆。可能是去换个用户名   
      onlineUsersHash[Request.UserHostAddress]=Request.Cookies[″UserName″].Value;   
      }   
      }   
        
      //   将用户的   IP   地址和   SessionID   对应起来   
      if(!onlineUsersSessionIPHash.ContainsKey(Session.SessionID))   
      onlineUsersSessionIPHash.Add(Session.SessionID,   Request.UserHostAddress);   
        
      Application.UnLock();   
      }   
        
      protected   void   Session_End(Object   sender,   EventArgs   e)   
      {   
      Application.Lock();   
        
      if(Application[KEY_ONLINEUSERS]!=null)   
      {   
      Hashtable   onlineUsersHash=(Hashtable)Application[KEY_ONLINEUSERS];   
      Hashtable   onlineUsersSessionIPHash=(Hashtable)Application[KEY_ONLINEUSERS_SESSIONIP];   
        
      //   获取用户的IP地址   
      string   IP=(string)onlineUsersSessionIPHash[Session.SessionID];   
        
      //   移除用户的IP地址   
      onlineUsersSessionIPHash.Remove(Session.SessionID);   
        
      //   如果没有一个Session指向这个IP了,则说明这个用户确实已经离开了网站   
      //   可以删除该用户的用户名称了   
      if(!onlineUsersSessionIPHash.ContainsValue(IP))   
      onlineUsersHash.Remove(IP);   
      }   
        
      Application.UnLock();   
      } 
      

  5.   

    这个在线与否在Web下有两个特点
    第1,不精确 
    第2,对资源要求高.我用的是在数据库里记录每个用户最后一次操作的时间,和当前时间比较,如果大于某个值(比如说5分钟)就判断该用户离线.否则在线.当然,如果用户直接点了退出按钮就直接将该时间清空(或用别的标志位,这样可以保留最后时间这个有用的信息).
      

  6.   

    只要对用户的在线状态进行了维护,就可以获得。而维护用户的在线状态的实现技术很多,比如Cookie、Session、Application、Cache、持久到数据库等等
      

  7.   

    过去很多很多次了,懒得回答这样的问题了,请google答案。我只提出两点此类问题最起码的需求条件,这是实际的系统都作为“常识”被用户隐含地要求的:1. 用户离线有好多种情况。例如用户访问到其它网站上去了,不再看原来的这个网站的页面了,此时这个网站应该知道用户离线了。另外,浏览器出故障了,或者网络断开了,这在互联网(与一般的c/s应用程序相比)是最常见的事情,网站也应该知道用户离线了。2. 应该在用户离线一分钟之内就记录到服务器,如果过了20分钟才记录(例如此时用户无法再次登录了),或者用户在页面上浏览(发呆)才几分钟就被服务器误认为离线,都是不恰当的。