ASP.NETはオンラインユーザのリアルタイム表示を実現
14020 ワード
最近の学習では、他のリソースを参考にして、簡単なオンラインユーザ表示機能を作成しました.
1、グローバルメモリをオンライン人員リストとして定義する
2、リアルタイムでユーザーSession値を判断することにより、あるユーザーのログインまたはオフラインを判断する
3、ユーザーのオンラインとオフラインに対して、ユーザーをメモリに追加したり、メモリのユーザーリストのユーザーを削除したりすることによって実現する
次に、この機能を実装するクラスを示します.
ユーザーがログインに成功したときに、変更したユーザーの唯一の値をメモリリストに追加します.
このユーザのセッションが終了する前に削除すればよい.
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 }
ユーザーがログインに成功したときに、変更したユーザーの唯一の値をメモリリストに追加します.
このユーザのセッションが終了する前に削除すればよい.