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个用户,同时也关闭浏览器测试用户,准确性也不错!抛弃了不准确的原始老方法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/401681.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理解关键的渲染路径

本文转载自&#xff1a;《Understanding the Critical Rendering Path》,原文地址&#xff1a;https: //bitsofco.de/understanding-the-critical-rendering-path/ 当浏览器从服务器接收到一个HTML页面的请求时&#xff0c;到屏幕上渲染出来要经过很多个步骤。浏览器完成这一系…

Openfire3.9.3源代码导入eclipse中开发配置指南(转载)

看到这篇文章的的网友应该已经安装了jdk,eclipse&#xff0c;我就不在安装这些开发工具上赘述了&#xff0c;附载一下openfire的下载地址&#xff1a;http://www.igniterealtime.org/downloads/index.jsp。1、下载源码openfire_src_3_9_3.zip&#xff0c;目前最新的版本是3.9.3…

Gulp在前端的常用操作实例

以前在做代码优化的时候&#xff0c;一般都用一些网上的在线工具来完成&#xff0c;写LESS的时候&#xff0c;一般用Koala来编译&#xff0c;感觉用起来也挺不错的。但是现在构建工具的出现&#xff0c;让以前做的那些繁琐操作变的更方便一些了&#xff0c;我在这里也用构建工具…

电池栏上弹窗

//可以不被电池栏挡住 (UILabel *)alertLabel { UILabel *label [[UILabel alloc] initWithFrame:CGRectMake(0, 20.f, 320.f, 0.f)]; label.backgroundColor [UIColor colorWithRed:240.f/255.f green:224.f/255.f blue:149.f/255.f alpha:1.0]; label.textAlignment NSTe…

深入了解CSS字体度量,行高和vertical-align

本文英文出处:http: //iamvdo.me/en/blog/css-font-metrics-line-height-and-vertical-align 著作权归作者所有。 转载自https: //www.w3cplus.com/css/css-font-metrics-line-height-and-vertical-align.html line-height和vertical-align在CSS中是两个简单的属性。如此简单&…

自主做一个类似于微博的项目(计划篇)

项目名称&#xff1a;archou微博项目架构&#xff1a;B/S架构项目开发语言&#xff1a;java、jquery、html、hql开发框架&#xff1a;spring mvc、hibernate开发平台&#xff1a;windows开发工具&#xff1a;STS(spring tool suite)、Dreamever、mysql项目管理工具&#xff1a;…

HTML5 Canvas制作雷达图实战

雷达图又叫蜘蛛网图&#xff0c;是一种对各项数据查看很明显的表现图&#xff0c;在很多游戏中&#xff0c;对游戏中的每个角色的分析图一般也用这种图。 下面&#xff0c;用HTML5的Cavas来实现雷达图。 效果 一、创建Canvas var mW 400; var mH 400; var mCtx null;var c…

AlphaBlend

AlphaBlend实现透明效果&#xff0c;只是仅仅能针对某块区域进行alpha操作&#xff0c;透明度可设。 TransparentBlt能够针对某种颜色进行透明&#xff0c;只是透明度不可设。 AlphaBlend&#xff1a; BLENDFUNCTION bn; bn.AlphaFormat 0; bn.BlendFlags 0; bn.BlendOp AC_…

ECMAScript 6网页样式修正器

最近在看ES6这一方面的图书&#xff0c;在搜索的过程中发现了《ECMAScript 6 入门-阮一峰》&#xff0c;感觉还不错。因为我个从比较喜欢看纸质的书&#xff0c;就想把这本书给打印下来。 但是网页版的《ECMAScript 6 入门-阮一峰》设置的样式只适合在网页上查看&#xff0c;并…

CAS去掉HTTPS认证

如何去掉HTTPS认证&#xff1f; 说明&#xff1a;默认情况下HTTP也是可以访问CAS SERVER的&#xff0c;但认证&#xff0c;登陆&#xff0c;退出等操作均没有任何的效果。所以必须作出下面的修改 1、进入WEB-INF\spring-configuration目录 打开warnCookieGenerator.xml文件 …

PWA(Progressive Web App)入门系列:(一)PWA简介

前言 PWA做为一门Google推出的WEB端的新技术&#xff0c;好处不言而喻&#xff0c;但目前对于相关方面的知识不是很丰富&#xff0c;这里我推出一下这方面的入门教程系列&#xff0c;提供PWA方面学习。 什么是PWA PWA全称Progressive Web App&#xff0c;直译是渐进式WEB应用…

Linux磁盘管理1

实验01磁盘分区实验目标为虚拟机添加一块80GB、SCSI接口的硬盘划分2个20GB的主分区剩余作为扩展分区新建2个逻辑分区分别为2GB、10GB将第1个逻辑分区的类型改为SWAPID 82将第2个逻辑分区的类型改为VFATID b确认分区无误后保存退出使用partprobe识别新的分区表 【最好是重启一…

Vue DevTools可使用修正方法

因为工作要求&#xff0c;目前主要在用Vue.js技术栈做开发&#xff0c;调试是必不可少的&#xff0c;这里会用的Vue DevTools的调试工具&#xff0c;问题就出在这里&#xff0c;当用Vue DevTools做调试时&#xff0c;很多时候都不能用&#xff0c;提示没有监测到Vue&#xff0c…

svn 单独导出某一个目录文件

应需求&#xff0c;需要把svn版本库的某一个目录导出来&#xff0c;迁成另外一个库&#xff0c;查了下svn相关命令&#xff0c;可以使用svndumpfilter.示例&#xff1a;svndumpfilter include /trunk/system < full_system_0_158_201407270000.dmp > /tmp/system.dmp注意…

ZRender实现粒子网格动画实战

注&#xff1a;本博文代码基于ZRender 3.4.3版本开发&#xff0c;对应版本库地址&#xff1a;ZRender 库。 效果 实现分析 通过上面显示的效果图&#xff0c;可以看出&#xff0c;这种效果就是在Canvas中生成多个可移动的点&#xff0c;然后根据点之间的距离来确定是否连线&am…

python模块学习(1)

模块让你能够有逻辑地组织你的Python代码段。把相关的代码分配到一个 模块里能让你的代码更好用&#xff0c;更易懂。模块也是Python对象&#xff0c;具有随机的名字属性用来绑定或引用。简单地说&#xff0c;模块就是一个保存了Python代码的文件。模块能定义函数&#xff0c;类…

MySQL 迁移到半同步模式

下面实验是基于http://5073392.blog.51cto.com/5063392/1536487搭建的1&#xff09; 在master上安装插件mysql> install plugin rpl_semi_sync_master SONAME semisync_master.so;Query OK, 0 rows affected (0.18 sec)2&#xff09;在salve上安装插件mysql> INSTALL PLU…

CSS动画实战:创建一个太极Loading图

这里主要是使用CSS的animation和伪类来构建&#xff0c;分析设定关键帧的执行顺序和时间段。 效果 动画分析 首先通过效果对动画执行进行一下分析&#xff1a; 边框的四条边进行按顺序动画加载 。矩形边框变为圆行边框。太极图内部图案渐渐出现。太极图旋转。整个动画逆序执…

PWA(Progressive Web App)入门系列:(二)相关准备

前言 在上一章中&#xff0c;对PWA的相关概念做了基本介绍&#xff0c;了解了PWA的组成及优势。为了能够更快的进入PWA的世界&#xff0c;这一章主要对在PWA开发中&#xff0c;需要注意的问题&#xff0c;运行的环境及调试工具做介绍说明。 浏览器要求 因为目前各浏览器对于…

error: Refusing toundefine while domain managed save image exists

虚拟机无法删除的处理方法1&#xff09;、查看虚拟机状态virsh # list --allId Name State----------------------------------------------------9 instance-000000c7 running10 instance-0000002e running11 inst…