亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

ASP.NET實現用戶在線檢測的類源碼

2019-11-18 19:51:47
字體:
來源:轉載
供稿:網友

//online.cs(用戶在線檢測)
/*程序實現思路:

該用戶有以下幾個屬性:
name:用戶名
sessionID:用戶ID,通過它唯一表示一個用戶
iswhere :附加信息,用戶當前所在位置
lasttime:用戶登陸時間
curtime:本次刷新時間

在客戶端,使用一個IFRAME,裝載一個刷新頁面,每隔XX秒更新一下他的名字對應的curtime,就表示他仍然在

在服務器端,建立一個守護線程,每隔固定時間就運行一遍,然后判斷當前所有用戶列表中的時間間隔是否超出了規定的時間,如果超出,則將該用戶從在線列表中刪除,這樣就可以做到檢測用戶是否在線了,而如果再單獨
寫個用戶離線后的處理,就可以解決好多人問到的:用戶意外吊線后的處理。
*/

#define DEBUG

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections ;
using System.Threading ;
using System.Web;
using System.Diagnostics;

namespace SohoPRoject
{
    //定義了一個結構
    public struct User
    {
     public string name;
     public DateTime lasttime; 
     public DateTime curtime;
     public string sessionid;
  public string ip;
     public string iswhere;
    }

 public class OnLineUser
 {
  private static DataTable _alluser;
 
  //只讀屬性
  public DataTable alluser{
   get{return _alluser;}
  }

  public OnLineUser()
  {
   if(_alluser==null)
   {
    //define user list
    // Declare variables for DataColumn and DataRow objects.
    _alluser = new DataTable("onlineuser");

    DataColumn myDataColumn;
 
    // Create new DataColumn, set DataType, ColumnName and add to DataTable.   
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "name";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "name";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);
 
 
    // Create sessionid column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "sessionid";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "sessionid";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = true;
    _alluser.Columns.Add(myDataColumn);

    // Create ip column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "ip";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "ip";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);

    // Create iswhere column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.String");
    myDataColumn.ColumnName = "iswhere";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "iswhere";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);

    // Create iswhere column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.DateTime");
    myDataColumn.ColumnName = "lasttime";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "lasttime";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);

    // Create iswhere column.
    myDataColumn = new DataColumn();
    myDataColumn.DataType = System.Type.GetType("System.DateTime");
    myDataColumn.ColumnName = "curtime";
    myDataColumn.AutoIncrement = false;
    myDataColumn.Caption = "curtime";
    myDataColumn.ReadOnly = false;
    myDataColumn.Unique = false;
    _alluser.Columns.Add(myDataColumn);
   }
  }


  //功能說明:將當前用戶加入在線列表
  //如果該用戶的數據當前仍然在在線列表中,則暫時先不讓該用戶登陸,提示用戶存在
  public bool  AddUserToOnLine(User user)
  {
#if DEBUG
   (new SohoProject.SohoDebug()).WriteToDoc("開始進入<將當前用戶加入在線列表>....");
   (new SohoProject.SohoDebug()).WriteToDoc("/r/n");
#endif


   //開始搜索是否已經存在該用戶,如果存在則是改變數據,否則添加新的用戶
   string strExpr;
   strExpr = "sessionid='" + user.sessionid + "'";
   DataRow[] curUser;
   // Use the Select method to find all rows matching the filter.
#if DEBUG
   (new SohoProject.SohoDebug()).WriteToDoc("搜索字符串:" + strExpr);
   (new SohoProject.SohoDebug()).WriteToDoc("/r/n");
#endif


   curUser = _alluser.Select(strExpr);

#if DEBUG
   (new SohoProject.SohoDebug()).WriteToDoc(strExpr);
   (new SohoProject.SohoDebug()).WriteToDoc(curUser.Length.ToString());
#endif


   if (curUser.Length >0 )
   {
    for(int i = 0; i < curUser.Length; i ++)
    {
     curUser[i]["curtime"]=DateTime.Now;
     curUser[i]["iswhere"]=user.iswhere;
    }
   }
   else
   {
    //直接加入新的數據
    DataRow myRow;
    try
    {
     myRow = _alluser.NewRow();
     // Then add the new row to the collection.
     myRow["name"] = user.name;
     myRow["ip"] = user.ip;
     myRow["iswhere"] = user.iswhere;
     myRow["lasttime"] = user.lasttime;
     myRow["curtime"] = DateTime.Now;
     myRow["sessionid"] = user.sessionid;
     _alluser.Rows.Add(myRow);
    }
    catch(Exception e)
    {
     throw(new Exception(e + "--------------------" +  e.ToString())) ;
    }
   }
   _alluser.AcceptChanges();
   return true;
  } 
 


  //功能說明:判斷某用戶是否在線,本部分暫時不用
  //返回值:TRUE代表在線,FALSE不在
  public  Boolean IsUserOnLine(string name)
  {
   //需要先判斷用戶是否已經在用戶列表中了
   //開始搜索是否已經存在該用戶,如果存在則是改變數據,否則添加新的用戶
   string strExpr;
   strExpr = "name ='" + name + "'";
   DataRow[] curUser;
   // Use the Select method to find all rows matching the filter.
   curUser = _alluser.Select(strExpr);

   if (curUser.Length >0 )
   {
    return true;   
   }
   else
   {
    return false;
   }
  }
       
  //功能說明:更新用戶在線時間
  //返回值:最新的在線用戶列表
  public Boolean CheckUserOnLine(string name,string iswhere,string sessionid,string ip)
  {
#if DEBUG
   (new SohoProject.SohoDebug()).WriteToDoc("開始進入檢查用戶方法....");
   (new SohoProject.SohoDebug()).WriteToDoc("");
#endif

   //需要先判斷用戶是否已經在用戶列表中了
   User newuser=new User();
   newuser.name= name;
   newuser.iswhere= iswhere;
   newuser.lasttime=newuser.curtime=DateTime.Now;
   newuser.sessionid=sessionid;
   newuser.ip=ip;

   OnLineUser alluser= new OnLineUser();
   alluser.AddUserToOnLine(newuser);


#if DEBUG
   (new SohoProject.SohoDebug()).WriteToDoc("離開檢查用戶方法....");
#endif

   return true;
  }
 }
   
    //定義在線用戶類
    public class OnLineUser_old
    {
     private static ArrayList _alluser ;  //定義用戶
    
        public ArrayList alluser
        {
         get{return _alluser;}
         set{_alluser=value;}
        }
       
        public OnLineUser_old()  //構造函數
        {
         if(_alluser==null)
         {
          _alluser=new ArrayList();
         }
        }

        //功能說明:將當前用戶加入在線列表
        //如果該用戶的數據當前仍然在在線列表中,則暫時先不讓該用戶登陸,提示用戶存在
        public bool  AddUserToOnLine(User user)
        {
         //需要先判斷用戶是否已經在用戶列表中了
         if(_alluser==null)
         {
          _alluser.Add(user);
          return (true);
         }
         else
         {
    for ( int i = 0 ; i < _alluser.Count ; i ++)
          {
           //循環判斷用戶是否已經存在           SohoProject.User tempuser = (SohoProject.User)_alluser[i] ;

           if( tempuser.sessionid.Equals(user.sessionid))
           {
      //更新用戶在線時間
      tempuser.name=user.name;
      tempuser.curtime=DateTime.Now;
      tempuser.iswhere=user.iswhere;
      tempuser.sessionid=user.sessionid;
      tempuser.ip=user.ip;
      alluser[i]=tempuser;
      return(true);
      //return(true); //用戶已經存在,則直接退出           }
         }
          _alluser.Add(user);
          return (true);
         }
        } 
       
        //功能說明:判斷某用戶是否在線,本部分暫時不用
  //返回值:TRUE代表在線,FALSE不在
        public  Boolean IsUserOnLine(string name)
        {
         //需要先判斷用戶是否已經在用戶列表中了
         if(_alluser==null)
         {
          return (false);
         }
         else
         {
          for ( int i = 0 ; i < _alluser.Count ; i ++)
          {
           //循環判斷用戶是否已經存在           SohoProject.User tempuser = (SohoProject.User)_alluser[i] ;
           if(tempuser.name.ToLower().Equals(name.ToLower()))
           {
            return(true) ;
           }
         }
          return (false);
         }
        }
       
        //功能說明:更新用戶在線時間
  //返回值:最新的在線用戶列表
        public Boolean CheckUserOnLine(string name,string iswhere,string sessionid,string ip)
        {
         //需要先判斷用戶是否已經在用戶列表中了
         if(_alluser!=null)
         {
          User newuser=new User();
    newuser.name= name;
    newuser.iswhere= iswhere;
    newuser.lasttime=newuser.curtime=DateTime.Now;
    newuser.sessionid=sessionid;
    newuser.ip=ip;
   
    //OnLineUser alluser= new OnLineUser();
    AddUserToOnLine(newuser);
   }
   return(false);
        }
    }
   
   
   
    /*
    下面開始建立守護線程類:
    (注:此處,開始寫的時候本來想做成單件模式的,不過由于以前沒有做過這個東西,所以反而發生
    了很多問題,最后決定放棄而使用現有的格式)
    */
    public class CheckOnline
    {
     const int DELAY_TIMES = 10000 ;    //定義執行的時間間隔為5秒
     const int DELAY_SECONDS=60;     //將用戶掉線時間設置為30秒
    
  private Thread thread ;      //定義內部線程
  private static bool _flag=false;   //定義唯一標志
 
  public CheckOnline()
  {
         if (!_flag)
         {
          _flag= true;
             this.thread = new Thread(new ThreadStart(ThreadProc)) ;
             thread.Name = "online user" ;
             thread.Start() ;
            }
        }
 
 
        internal void ThreadProc()
        {
            while(true) 
            {
//              SohoProject.OnLineUser temp=new SohoProject.OnLineUser();  //定義一個用戶對象
//      for (int i=0 ;i< temp.alluser.Count;i++)
//          {
//           User tmpuser=(User)temp.alluser[i];
//           //我是將該用戶的最新時間加上30秒,然后和當前時間比較,小與當前時間,
//           //則表示該用戶已經吊線,則刪除他的記錄
//           if(tmpuser.curtime.AddSeconds(DELAY_SECONDS).CompareTo(DateTime.Now)<0)
//           {
//            temp.alluser.RemoveAt(i);
//           }
//          }

   

    SohoProject.OnLineUser temp=new SohoProject.OnLineUser();  //定義一個用戶對象
    //開始檢查是否有用戶過期了    string strExpr;
    //tmpuser.curtime.AddSeconds(DELAY_SECONDS).CompareTo(DateTime.Now)<0
    strExpr = "curtime < '" + DateTime.Now.AddSeconds( 0 - DELAY_SECONDS) + "'";
#if DEBUG
    (new SohoProject.SohoDebug()).WriteToDoc(strExpr);
#endif

    DataRow[] curUser;
    // Use the Select method to find all rows matching the filter.
    curUser = temp.alluser.Select(strExpr);

    if (curUser.Length >0 )
    {
     //刪除這些記錄
     for(int i = 0; i < curUser.Length; i ++)
     {
      curUser[i].Delete();
     }
     temp.alluser.AcceptChanges();
    }
                Thread.Sleep(DELAY_TIMES) ;
            }
        }
    }
}

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人黄在线观看| 国产精品高清在线观看| 国产精品国产自产拍高清av水多| 中文字幕日韩在线观看| 亚洲精品免费在线视频| 国产精品扒开腿做爽爽爽视频| 国产精品自产拍在线观看中文| 色综合视频一区中文字幕| 国产乱肥老妇国产一区二| 国产成人精品综合久久久| 亚洲色图五月天| 久久久97精品| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲一级免费视频| 亚洲一区二区三区777| 欧美成人激情视频免费观看| 精品自在线视频| 亚洲国产精品免费| xxxxx91麻豆| 欧美激情亚洲视频| 亚洲无亚洲人成网站77777| 亚洲少妇中文在线| 亚洲人成毛片在线播放| 亚洲自拍偷拍视频| 欧美日韩免费在线观看| 日韩欧美在线字幕| 91香蕉亚洲精品| 国产精品美女999| 成人性教育视频在线观看| 欧美性少妇18aaaa视频| 国产精品999| 亚洲性线免费观看视频成熟| 国产91在线播放| 久久久久日韩精品久久久男男| 色综合久久精品亚洲国产| 欧美一区二区三区免费视| 国产精品都在这里| 国产精品一二三视频| 欧美大片大片在线播放| 亚洲成人三级在线| 日韩精品久久久久| 日韩精品欧美激情| 亚洲精品黄网在线观看| 亚洲男人天堂网| 国产精品狼人色视频一区| xvideos亚洲| 亚洲专区中文字幕| 操91在线视频| 亚洲精品免费网站| 国产精品免费看久久久香蕉| 欧美性开放视频| 国产一区二区美女视频| 色偷偷噜噜噜亚洲男人的天堂| 成人做爽爽免费视频| 日韩中文av在线| 国产精品麻豆va在线播放| 懂色av一区二区三区| 夜夜嗨av一区二区三区四区| 久久久久久久久久久成人| 一区二区日韩精品| 中文字幕av日韩| 国产在线视频一区| 国外成人在线播放| 中文精品99久久国产香蕉| 欧美丰满片xxx777| 国产有码一区二区| 成人免费淫片aa视频免费| 成人免费福利视频| 亚洲最新av网址| 国产成人97精品免费看片| 国产偷国产偷亚洲清高网站| 国产91亚洲精品| 国产69精品久久久久久| 国产91成人在在线播放| 欧美大片大片在线播放| 国产精品看片资源| 精品视频中文字幕| 欧美日韩人人澡狠狠躁视频| 日韩一区视频在线| 2021国产精品视频| 国产精品尤物福利片在线观看| 97不卡在线视频| 欧美做受高潮电影o| 国产日韩欧美一二三区| 国产欧美日韩专区发布| 精品无人区乱码1区2区3区在线| 九九久久精品一区| 国产一区二区在线播放| 亚洲自拍偷拍一区| 狠狠躁18三区二区一区| 中文字幕在线国产精品| 国产精品亚洲自拍| 亚洲色图欧美制服丝袜另类第一页| 日韩精品在线观看一区二区| 2024亚洲男人天堂| 日本午夜精品理论片a级appf发布| 国产欧美日韩中文| 亚洲一区二区三区sesese| 岛国av一区二区| 92看片淫黄大片看国产片| 国产精品xxxxx| 中文字幕亚洲在线| 中文字幕不卡在线视频极品| 欧美精品video| 日韩精品免费在线播放| 精品久久久久久中文字幕大豆网| 久久久精品视频在线观看| 欧美极品少妇xxxxⅹ裸体艺术| 色yeye香蕉凹凸一区二区av| 国产中文字幕91| 欧美另类在线播放| 欧美电影免费观看网站| 欧美国产日韩中文字幕在线| 国产精品免费久久久久影院| 91久久精品国产| 91av免费观看91av精品在线| 久久久精品一区二区| 大伊人狠狠躁夜夜躁av一区| 国产精品美女久久| 久久精品视频网站| 中文字幕亚洲天堂| 777精品视频| 国产精品日韩一区| 日韩动漫免费观看电视剧高清| 成人黄色网免费| 日韩www在线| 在线观看精品国产视频| 欧美日韩成人在线视频| 欧美日韩一区二区精品| 久久久99久久精品女同性| 91情侣偷在线精品国产| 欧美精品成人91久久久久久久| 欧美午夜激情在线| 亚洲精品国产精品自产a区红杏吧| 国产女精品视频网站免费| 日韩av在线免费| 精品国产乱码久久久久久虫虫漫画| 欧美午夜性色大片在线观看| 亚洲一区中文字幕在线观看| 色婷婷综合久久久久中文字幕1| 午夜精品三级视频福利| 亚洲第一网站免费视频| 中文字幕在线看视频国产欧美在线看完整| 亚州成人av在线| 色综合视频网站| 中文精品99久久国产香蕉| 国外成人免费在线播放| 免费不卡在线观看av| 亚洲第一av网| 国产亚洲美女精品久久久| 日韩综合中文字幕| 91最新国产视频| 精品国产区一区二区三区在线观看| 久久亚洲春色中文字幕| 国产日韩精品综合网站| 一区二区在线免费视频| 午夜免费日韩视频| 亚洲人免费视频| 精品久久国产精品| 欧美性理论片在线观看片免费| 精品福利在线观看| 欧美电影在线观看完整版| 日本韩国在线不卡| 日本高清久久天堂|