構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(40)-精準線上人數統計實現-【過濾器+Cache】

來源:互聯網
上載者:User

標籤:

原文:構建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(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);            // SessionID            user.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 MVC4+EF5+EasyUI+Unity2.x注入的後台管理系統(40)-精準線上人數統計實現-【過濾器+Cache】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.