ASP.NETはオンラインユーザのリアルタイム表示を実現

14020 ワード

最近の学習では、他のリソースを参考にして、簡単なオンラインユーザ表示機能を作成しました.
1、グローバルメモリをオンライン人員リストとして定義する
2、リアルタイムでユーザーSession値を判断することにより、あるユーザーのログインまたはオフラインを判断する
3、ユーザーのオンラインとオフラインに対して、ユーザーをメモリに追加したり、メモリのユーザーリストのユーザーを削除したりすることによって実現する
次に、この機能を実装するクラスを示します.
  1 public static class UserOnline

  2 {

  3     /// <summary>

  4     ///          

  5     /// </summary>

  6     public static Hashtable OnlineUserList

  7     {

  8         get

  9         {

 10             if (HttpContext.Current.Application["OnlineUserList"] == null)

 11             {

 12                 Hashtable onlineUserList = new Hashtable();

 13                 HttpContext.Current.Application["OnlineUserList"] = onlineUserList;

 14             }

 15 

 16             return (Hashtable)HttpContext.Current.Application["OnlineUserList"];

 17         }

 18         set

 19         {

 20             HttpContext.Current.Application["OnlineUserList"] = value;

 21         }

 22     }

 23 

 24     /// <summary>

 25     ///       

 26     /// </summary>

 27     public static bool OnlineUserList_Add(string key, string value)

 28     {

 29         try

 30         {

 31             if (OnlineUserList.Contains(key))

 32                 OnlineUserList[key] = value;

 33             else

 34                 OnlineUserList.Add(key, value);

 35             return true;

 36         }

 37         catch

 38         {

 39             return false;

 40         }

 41     }

 42 

 43     /// <summary>

 44     ///       

 45     /// </summary>

 46     public static bool OnlineUserList_Add(string key)

 47     {

 48         string value = DateTime.Now.ToString();

 49         return OnlineUserList_Add(key, value);

 50     }

 51 

 52     /// <summary>

 53     ///       

 54     /// </summary>

 55     public static bool OnlineUserList_Delete(string key)

 56     {

 57         bool re = false;

 58         if (OnlineUserList.Contains(key))

 59         {

 60             Hashtable userList = OnlineUserList;

 61             userList.Remove(key);

 62             OnlineUserList = userList;

 63             return true;

 64         }

 65         return re;

 66     }

 67 

 68     /// <summary>

 69     ///         

 70     /// </summary>

 71     public static bool UserIsOnline(string adminName)

 72     {

 73         OnlineClearUserOutTimeInOnLineList();

 74         return OnlineUserList.Contains(adminName) ? true : false;

 75     }

 76 

 77     /// <summary>

 78     ///         

 79     /// </summary>

 80     public static void OnlineClearUserOutTimeInOnLineList()

 81     {

 82         int OnlineTimeOut = 20;

 83         Hashtable list = new Hashtable();

 84         Hashtable temList = new Hashtable();

 85         list = OnlineUserList;

 86         temList = new Hashtable(list);

 87         foreach (DictionaryEntry de in temList)

 88         {

 89             //    

 90             DateTime onlineTime = Convert.ToDateTime(de.Value);

 91             TimeSpan timeSpan = DateTime.Now - onlineTime;

 92 

 93             //                     ( :         )

 94             if (timeSpan.TotalMinutes >= (double)OnlineTimeOut)

 95             {

 96                 list.Remove(de.Key);

 97             }

 98 

 99         }

100 

101         OnlineUserList = list;

102     }

103 

104 }

ユーザーがログインに成功したときに、変更したユーザーの唯一の値をメモリリストに追加します.
このユーザのセッションが終了する前に削除すればよい.