构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...
系列目錄
上次的探討沒(méi)有任何結(jié)果,我瀏覽了大量的文章和個(gè)別系統(tǒng)的參考!決定用Cache來(lái)做,這可能有點(diǎn)難以接受但是配合mvc過(guò)濾器來(lái)做效果非常好!
由于之前的過(guò)濾器我們用過(guò)了OnActionExecuting這個(gè)方法來(lái)判斷權(quán)限
現(xiàn)在在方法被執(zhí)行后我們用OnActionExecuted來(lái)監(jiān)聽(tīng)用戶(hù)的操作和刷新用戶(hù)在線(xiàn)列表
首先下載http://files.cnblogs.com/ymnets/OnlineUser.7z這個(gè)類(lèi)庫(kù),代碼清晰,并加注釋
這個(gè)類(lèi)庫(kù)包括了操作在線(xiàn)用戶(hù)列表的增刪方法,大家可以下載下來(lái)看并放到
可以打開(kāi)研究其代碼!
在App.Admin新建類(lèi)OnlineHttpModule
using App.Core.OnlineStat; using App.Models.Sys; using System; using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Net.Http; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Web; using System.Web.Routing;namespace App.Admin {public class OnlineHttpModule{// 緩存鍵public static readonly string g_onlineUserRecorderCacheKey = "__OnlineUserRecorder";#region IHttpHandler 成員public static void ProcessRequest(){// 獲取在線(xiàn)用戶(hù)記錄器OnlineUserRecorder recorder = HttpContext.Current.Cache[g_onlineUserRecorderCacheKey] as OnlineUserRecorder;if (recorder == null){// 創(chuàng)建記錄器工廠(chǎng)OnlineUserRecorderFactory factory = new OnlineUserRecorderFactory();// 設(shè)置用戶(hù)超時(shí)時(shí)間factory.UserTimeOutMinute = 2;// 統(tǒng)計(jì)時(shí)間間隔factory.StatisticEventInterval = 20;// 創(chuàng)建記錄器recorder = factory.Create();// 緩存記錄器 HttpContext.Current.Cache.Insert(g_onlineUserRecorderCacheKey, recorder);}OnlineUser user = new OnlineUser();AccountModel model = (AccountModel)HttpContext.Current.Session["Account"];//注意session的名稱(chēng)是和登錄保存的名稱(chēng)一致// 用戶(hù)名稱(chēng)user.UserName = Convert.ToString(model.Id);// SessionIDuser.SessionID = HttpContext.Current.Session.SessionID;// IP 地址user.ClientIP = HttpContext.Current.Request.UserHostAddress;// 最后活動(dòng)時(shí)間user.ActiveTime = DateTime.Now;// 最后請(qǐng)求地址user.RequestURL = HttpContext.Current.Request.RawUrl;// 保存用戶(hù)信息 recorder.Persist(user);}#endregion} }?
這個(gè)類(lèi)在用戶(hù)登錄時(shí)被調(diào)用和在過(guò)濾器被調(diào)用,調(diào)用代碼
過(guò)濾器:
public class SupportFilterAttribute : ActionFilterAttribute{public string ActionName { get; set; }private string Area;// 方法被執(zhí)行后的更新在線(xiàn)用戶(hù)列表public override void OnActionExecuted(ActionExecutedContext filterContext){OnlineHttpModule.ProcessRequest();} ......................................登錄時(shí)候的設(shè)置:
AccountModel account = new AccountModel();account.Id = user.Id;account.TrueName = user.TrueName;account.Photo = string.IsNullOrEmpty(user.Photo)?"/Images/Photo.jpg":user.Photo;Session["Account"] = account;//在線(xiàn)用戶(hù)統(tǒng)計(jì)OnlineHttpModule.ProcessRequest();調(diào)用非常簡(jiǎn)單,實(shí)現(xiàn)非常簡(jiǎn)單!
現(xiàn)在看看如果獲取在線(xiàn)列表:
// 綁定在線(xiàn)用戶(hù)列表IList<OnlineUser> userList = recorder.GetUserList();foreach (var OnlineUser in userList){sb.AppendFormat(OnlineUser.UserName+"<br>");}OnlineHttpModule可以自由設(shè)置統(tǒng)計(jì)的間隔(秒),和用戶(hù)超時(shí)的時(shí)間,這很精準(zhǔn)的統(tǒng)計(jì)了用戶(hù)2分鐘無(wú)操作被視為離線(xiàn)!
我分別用IE和chome測(cè)試了2個(gè)用戶(hù),同時(shí)也關(guān)閉瀏覽器測(cè)試用戶(hù),準(zhǔn)確性也不錯(cuò)!拋棄了不準(zhǔn)確的原始老方法
posted on 2015-04-07 09:18 NET未來(lái)之路 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/lonelyxmas/p/4397465.html
總結(jié)
以上是生活随笔為你收集整理的构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: duilib 自带树形控件的认识
- 下一篇: Facebook POP 使用指南