ASP.NET MVC5+EF6+EasyUI 后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...
生活随笔
收集整理的這篇文章主要介紹了
ASP.NET MVC5+EF6+EasyUI 后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
系列目錄
上次的探討沒有任何結果,我瀏覽了大量的文章和個別系統的參考!決定用Cache來做,這可能有點難以接受但是配合mvc過濾器來做效果非常好!
由于之前的過濾器我們用過了OnActionExecuting這個方法來判斷權限
現在在方法被執行后我們用OnActionExecuted來監聽用戶的操作和刷新用戶在線列表
首先下載http://files.cnblogs.com/ymnets/OnlineUser.7z這個類庫,代碼清晰,并加注釋
這個類庫包括了操作在線用戶列表的增刪方法,大家可以下載下來看并放到
可以打開研究其代碼!
在App.Admin新建類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(){// 獲取在線用戶記錄器OnlineUserRecorder recorder = HttpContext.Current.Cache[g_onlineUserRecorderCacheKey] as OnlineUserRecorder;if (recorder == null){// 創建記錄器工廠OnlineUserRecorderFactory factory = new OnlineUserRecorderFactory();// 設置用戶超時時間factory.UserTimeOutMinute = 2;// 統計時間間隔factory.StatisticEventInterval = 20;// 創建記錄器recorder = factory.Create();// 緩存記錄器 HttpContext.Current.Cache.Insert(g_onlineUserRecorderCacheKey, recorder);}OnlineUser user = new OnlineUser();AccountModel model = (AccountModel)HttpContext.Current.Session["Account"];//注意session的名稱是和登錄保存的名稱一致// 用戶名稱user.UserName = Convert.ToString(model.Id);// SessionIDuser.SessionID = HttpContext.Current.Session.SessionID;// IP 地址user.ClientIP = HttpContext.Current.Request.UserHostAddress;// 最后活動時間user.ActiveTime = DateTime.Now;// 最后請求地址user.RequestURL = HttpContext.Current.Request.RawUrl;// 保存用戶信息 recorder.Persist(user);}#endregion} }?
這個類在用戶登錄時被調用和在過濾器被調用,調用代碼
過濾器:
public class SupportFilterAttribute : ActionFilterAttribute{public string ActionName { get; set; }private string Area;// 方法被執行后的更新在線用戶列表public override void OnActionExecuted(ActionExecutedContext filterContext){OnlineHttpModule.ProcessRequest();} ......................................登錄時候的設置:
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;//在線用戶統計OnlineHttpModule.ProcessRequest();調用非常簡單,實現非常簡單!
現在看看如果獲取在線列表:
// 綁定在線用戶列表IList<OnlineUser> userList = recorder.GetUserList();foreach (var OnlineUser in userList){sb.AppendFormat(OnlineUser.UserName+"<br>");}OnlineHttpModule可以自由設置統計的間隔(秒),和用戶超時的時間,這很精準的統計了用戶2分鐘無操作被視為離線!
我分別用IE和chome測試了2個用戶,同時也關閉瀏覽器測試用戶,準確性也不錯!拋棄了不準確的原始老方法
總結
以上是生活随笔為你收集整理的ASP.NET MVC5+EF6+EasyUI 后台管理系统(40)-精准在线人数统计实现-【过滤器+Cache】...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到车子坏了是什么意思
- 下一篇: Openfire3.9.3源代码导入ec