asp.net MVC 统计在线人数功能实现
今天开发一个设计一个统计在线人数的统计。实现方式是在MVC 中,用户次执行一个Action请求完成后,向数据表中插入一条用户心跳记录,统计在线人数则是根据该记录,30分钟内有记录的用户则为在线状态。
首先设计表心跳记录表结构MOdel

接下来添加 CheckACAttribute 类继承 ActionFilterAttribute基类,并在FilterConfig类中注册。
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new ASSFramework.Web.Common.CheckACAttribute());
}
}
CheckACAttribute类的拦截器方法实现如下
public override void OnActionExecuted(ActionExecutedContext filterContext) {
if (isInsertOpenLog == true) { //判断是否写入心跳记录
//每一个action 执行后记录一下操作日志,用于统计用户在线。
ASSFramework.Services.BLL.sysOpenLogBLL bll = new ASSFramework.Services.BLL.sysOpenLogBLL();
BaseController baseController = (BaseController)filterContext.Controller;
sysOpenLog model = new sysOpenLog();
model.userID = baseController.GetSysUser().userID; //获取用户ID
model.userNameCn = baseController.GetSysUser().userNameCn; //用户名称
model.createdDate = DateTime.Now;
model.flag = 1;
bll.Insert(model);
}
base.OnActionExecuted(filterContext);
}
业务逻辑层
public class sysOpenLogBLL {
DAL.sysOpenLogDAL dal = new DAL.sysOpenLogDAL();
/// <summary>
/// 统计在线人数
/// </summary>
/// <returns></returns>
public IList<Hashtable> GetOnLinelList() {
return dal.GetOnLinelList();
}
}
数据访问层,数据访问使用到的是IBatisNet框架,该框架轻小灵活,第一次使用就深深的喜欢上了。
public class sysOpenLogDAL {
/// <summary>
/// 统计在线人数
/// </summary>
/// <returns></returns>
public IList<Hashtable> GetOnLinelList() {
string stmtId = "sysOpenLog.GetOnLinelList";
return ASSMapper.Instance().QueryForList<Hashtable>(stmtId, "");
}
表映射xml文件如下
<statements>
<!--统计在线人数,近半个小时有活动的用户-->
<select id="GetOnLinelList" parameterClass="map" resultClass="Hashtable">
select userID,userNameCn,MAX(createdDate)
from sysOpenLog
group by userID,userNameCn
having MAX(createdDate) >= DATEADD(MINUTE,-30,GETDATE())
</select>
<!--添加-->
<insert id="Insert" parameterClass="sysOpenLog" resultClass="Int32">
Insert into sysOpenLog( userID, userNameCn, createdDate, flag )values( #userID#, #userNameCn#, #createdDate#, #flag# ) SELECT @@IDENTITY
</insert>
</statements>
基础数据通过action 请求后写入心跳记录表,接下来就要展示出来在线人数信息
在控制器中添加 Index()
public ActionResult Index()
{
ASSFramework.Services.BLL.sysOpenLogBLL bll = new Services.BLL.sysOpenLogBLL();
IList<Hashtable> model = bll.GetOnLinelList();
return View(model);
}
添加Idex视图页面
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using System.Collections;
@using ASSFramework.Models;
@model IList<Hashtable>
<!--导航-->
@Html.place("首页;用户管理;在线统计")
<div class="formbody">
<div class="formtitle"><span>在线人数</span></div>
<div class="toolsli">
<ul class="toollist">
@foreach (var item in Model) {
<li><a><img src="~/Content/theme/images/i07.png" /></a><h2>@item["userNameCn"] </h2></li>
}
</ul>
</div>
</div>
最终显示结果如下

这次只贴出来了大致的实现思路和简单的代码贴图。
统计在线人数的功能基本实现了,但是这时要考虑到这心跳记录表如果用户量多,而且操作频繁的话,数据量会越来越大,这里我们只需要统计半小时以内的用户活动记录,所以在sql server 数据库中添加一个作业,定时删除垃圾数据。
asp.net MVC 统计在线人数功能实现的更多相关文章
- PHP实现统计在线人数功能示例
本文实例讲述了PHP实现统计在线人数的方法.分享给大家供大家参考,具体如下: 我记得ASP里面统计在线人数用application 这个对象就可以了.PHP怎么设计? PHP对session对象的封装 ...
- PHP 实现精确统计在线人数功能
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com PHP对session对象的封装的很好,根据HTTP协议,每个范 ...
- kindeditor-4.1.10 结合 Asp.Net MVC 添加图片功能
KindEditor是一套开源的HTML可视化编辑器,现在我要结合Asp.Net MVC4 上传图片功能,做相应的配置和修改, 其实网上也有人写过类似的文章了,我写出来是以防以后使用的时候出现这样的问 ...
- ASP.NET MVC 3:缓存功能的设计问题
今天这一篇文章我来谈一谈在MVC 3项目中的缓存功能,以及针对缓存的一些设计上的考量,给大家参考参考. 为什么需要讨论缓存?缓存是一个中大型系统所必须考虑的问题.为了避免每次请求都去访问后台的资源(例 ...
- asp.net mvc 简单搜索功能
View中代码: <input type="text" class="searchText" id="searchText"/> ...
- 转 ---- Asp.net mvc项目分页功能
1.定义一个分页用的Page<T>类 1 /* 使用示例: 2 var pager = new Pager<Article>( 3 this.ControllerContext ...
- Asp.net mvc项目分页功能
1.定义一个分页用的Page<T>类 /* 使用示例: var pager = new Pager<Article>( this.ControllerContext, //上下 ...
- Application 统计在线人数
MVC 统计在线人数: protected void Application_Start() { Application[; AreaRegistration.RegisterAllAreas(); ...
- ASP.NET没有魔法——ASP.NET MVC 过滤器(Filter)
上一篇文章介绍了使用Authorize特性实现了ASP.NET MVC中针对Controller或者Action的授权功能,实际上这个特性是MVC功能的一部分,被称为过滤器(Filter),它是一种面 ...
随机推荐
- [SCOI2007]修车(建图好题)
[SCOI2007]修车 https://www.lydsy.com/JudgeOnline/problem.php?id=1070 Time Limit: 1 Sec Memory Limit: ...
- 使用一般处理程序(IHttpHandler)制作图片水印
做网站的时候经常需要将图片加上网站名称的水印.这样做可以使别人转载图片的时候出现图片出处 ,利于网站宣传.但是如果利用ps来一个一个加水印工作量非常浩大,而且修改了之后就没法还原.这 篇教程教大家利用 ...
- 网页中引用优酷视频去广告自动播放代码[xyytit]
很多时候需要在网站中加入视频,可视频太大放自己服务器上太占空间,可以把视频上传到优酷网上,这样节省了空间,打开速度方面也会有不少提升.下面教大家如何引用自动播放的优酷视频.把下面的代码加在你网页适当位 ...
- django做form表单的数据验证
我们之前写的代码都没有对前端input框输入的数据做验证,我们今天来看下,如果做form表单的数据的验证 在views文件做验证 首先用文字描述一下流程 1.在views文件中导入forms模块 2. ...
- [leetcode]277. Find the Celebrity 找名人
Suppose you are at a party with n people (labeled from 0 to n - 1) and among them, there may exist o ...
- php socket 编程(一)
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信.在Internet上的主机一般运行了多个服务软件,同时提 ...
- 使用jsonp跨域发送请求
如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型. 使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面. ...
- Django之ORM数据库
5.1 数据库的配置 1 django默认支持sqlite,mysql, oracle,postgresql数据库. <1> sqlite django默认使用sqlite的数据库 ...
- PAT 1035 插入与归并(25)(代码+思路+测试点分析)
1035 插入与归并(25 分) 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列.每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置.如此迭代直到 ...
- UI设计行业中的“延禧攻略”,教你从青铜变王者
最近一直在追<延禧攻略>,女主魏璎珞敢爱敢恨,有仇必报的性格吸引不少人,她从低贱的秀坊小宫女步步为营,最终成为皇帝最宠爱的令妃呼风唤雨.尔虞我诈的后宫,想要打怪升级光有颜值是万万不够的,更 ...