Asp.Net MVC3.0网站统计登录认证的在线人数

Asp.Net MVC3.0网站统计登录认证的在线人数

前言

  对于一个网站来说,统计在线人数是一个很重要的工作。平时也发现很多的网站论坛等都有在线人数的显示。对于一个网站如果在线人数很多,用户看到了这么个数字也是很了不起的事情。由于之前对于这个知识点只是知道,并没有去了解过,这两天偶然的机会又看到了,于是自己整理了一个简单的版本,也方便让大家来给提提意见。

  本文主要通过Application和Session全局来统计在线人数,暂时只统计登录验证过的。实现的大致方案如下:

  1、在全局应用程序启动的时候,Application["count"]=0;初始化统计在线人数为0

  2、处理一个简单的Form登录认证,在登录的时候对全局变量Application["count"]进行累加1的操作。同时,在登录的时候写入Session值,设置一个有效的时间为1分钟(多长时间根据需要,这里只是作为测试使用)。

  3、在Session失效、用户登出、浏览器关闭的情况触发,全局的会话函数进行对全局变量Application["count"]进行累减1的操作。

正文

第一步:新建一个Asp.Net MVC3.0的Web项目,选择Razor引擎。设置初始在线人数。在Global.asax文件中找到Application_Start。

        protected void Application_Start()
        {
            Application["count"] = 0;   ///在应用程序第一次启动时初始化在线人数为0
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);
        }

第二步:简单修改登录验证,认证成功,写入Session值,并对在线人数进行加1的处理。

        [HttpPost]
        public ActionResult LogOn(LogOnModel model, string returnUrl)
        {
            if (ModelState.IsValid)  ////简单的验证即为登录有效
            {
                //会话标示写入Session值,并设置有效时间
                System.Web.HttpContext.Current.Session.Add("SessionID", Guid.NewGuid().ToString());
                System.Web.HttpContext.Current.Session.Timeout = 5;
                ///登录成功,对在线人数全局变量进行加1处理
                System.Web.HttpContext.Current.Application["count"] = Convert.ToInt32(System.Web.HttpContext.Current.Application["count"]) + 1;
                if (Request.QueryString["ReturnUrl"] != null)
                {
                    FormsAuthentication.RedirectFromLoginPage(model.UserName, false);
                }
                else
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, false);
                    return RedirectToAction("Index", "Home");
                }
            }
            return View(model);
        }

第三步:在全局Global.asax文件中添加Session_End中,即会话结束(登出,浏览器关闭,Session到期失效)

        protected void Session_End(object sender, EventArgs e)
        {
            Application.Lock();
            Application["count"] = Convert.ToInt32(Application["count"]) - 1;
            Application.UnLock();
        }

这样要要记得加锁处理,因为可能有并发的问题。登录的时候也要进行加锁和解锁的处理,上面没加而已。

第四步:对于登出的Action进行处理如下:

        public ActionResult LogOff()
        {
            FormsAuthentication.SignOut();
            System.Web.HttpContext.Current.Session.Abandon();//取消当前会话
            return RedirectToAction("Index", "Home");
        }

取消当前会话,这样才会触发在上面定义的全局的Session_End函数。

第五步:在布局模版中的body标签中添加onbeforeunload事件。

由于该事件在刷新和关闭的时候都会调用,所以在实现时做如下处理:

<script type="text/javascript">
    function PageClose() {
        var n = window.event.screenX - window.screenLeft;
        var b = n > document.documentElement.scrollWidth - 20;
        if (b && window.event.clientY < 0 || window.event.altKey) {
            alert("是关闭而非刷新");
            if (‘@Request.IsAuthenticated‘ == ‘True‘) {
                window.location.href = "../Account/ClosePage";
            }
        }
        else {
            alert("是刷新而非关闭");
        }
    }
</script>

此时关闭的情况调用的Action如下: 

        public void ClosePage()
        {
            FormsAuthentication.SignOut();
            System.Web.HttpContext.Current.Session.Abandon();//取消当前会话
        }

总结

  实例下载链接为http://pan.baidu.com/share/link?shareid=1839967473&uk=4244870074,可以下载项目,运行进行测试即可,暂时本人用IE8测试功能基本实现。针对关闭浏览器网页触发事件,兼容各个浏览器的问题暂未考虑,如果你对此感兴趣,记得先用IE进行测试哦。如果发现问题希望及时通知,以便对方案进行更改。

时间: 2024-10-23 12:30:40

Asp.Net MVC3.0网站统计登录认证的在线人数的相关文章

asp.net mvc3.0第一个程序helloworld开发图解

步骤一:新建asp.net mvc3.0项目 (选择Razor模板) 步骤二:创建控制器 步骤三:控制器源码内右键创建对应视图 步骤四:控制器内添加代码 步骤五:视图页面输出内容 步骤六:F5调试

Asp.Net MVC3.0中防止跨站的POST

在Form中添加 @Html.AntiForgeryToken(); 在后台的Action中增加 [ValidateAntiForgeryToken] 这个方法还可以添加自定义的参数 @Html.AntiForgeryToken("SaltValue"); 后台的Action中,必需指名Token的值才允许正常提交. [ValidateAntiForgeryToken Salt=("SaltValue")] Asp.Net MVC3.0中防止跨站的POST,布布扣,

Nginx对某个目录或整个网站进行登录认证的方法

比如要对 网站目录下的 test 文件夹 进行加密认证 首先需要在opt 的主目录中 /opt/ 创建一个新文件 htpasswd 此文件的书写格式是 用户名:密码 每行一个账户 并且 密码必须使用函数 crypt(3) 加密 官方档说 可以用 Apache 的 htpasswd 工具来创建密码文件 [[email protected] /]# htpasswd -bash: htpasswd: command not found [[email protected] /]# 如果上述提示则需要

Log4Net异常日志记录在asp.net mvc3.0的应用

前言 log4net是.Net下一个非常优秀的开源日志记录组件.log4net记录日志的功能非常强大.它可以将日志分不同的等级,以不同的格式,输出到不同的媒介.本文主要是简单的介绍如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速创建系统日志,如何扩展以输出自定义字段. 用户可以从http://logging.apache.org/log4net/下载log4net的源代码.解压软件包后,在解压的src目录下将log4net.sln载入Visual

Windows Server 2008 R2上部署ASP.NET MVC3.0应用网站程序

系统和软件环境 Windows Server 2008 R2 IIS:4.5 .NET: 4.0 ASP.NET MVC 3.0 (1) 安装IIS 打开管理工具 > 服务器管理, 选择角色 > 添加角色 勾选Web服务器选项 选择除FTP外的角色服务(可选) (2) 安装Web Deployment 安装方式选择Custom 选中全部模块(可选) (3) 安装.NET Framework 4.0 (4) 注册ASP.NET 4.0 以管理员权限打开命令行窗口,运行如下命令: 64位系统 &g

经典ASP.NET MVC3.0入门详解

http://blog.csdn.net/csh624366188/article/details/7064269 :由于本文原在word文档里编写,写本文章时运用了大量截图,直接复制到博客里,没有显示图片, 图片只是一些简单的运行结果截图,不影响大家学习 p.Net MVC已经到第三版了,相信大家也都熟悉了,我也不再重复相关概念性的东西了.但是大家一定要了解,Asp.Net MVC是微软的一 个开源的UI层框架,是AspNet的另外一种开发模式.好废话不多说,那我们开始进入Asp.Net MV

ASP.NET MVC3.0或4.0设置二级域名的方法

之前我就想做二级域名指向同一个IP同一个程序无非是在路由匹配规则上做文章也就是对Url的重写的一种思路.我用了半天时间上网查阅了相关资料并做了Demo测试是完全 以的,在这分享给大家... 假如网站主域名是:www.abc.com 实现二级域名是:     tianjin.abc.com , shanxi.abc.com 这个样子. 首先定义DomainData.DomainRoute类 public class DomainRoute : Route { private Regex domai

.net实现网站用户登录认证

cookie登录后同域名下的网站保持相同的登录状态. 登录 private void SetAuthCookie(string userId, bool createPersistentCookie) { var ticket = new FormsAuthenticationTicket(2, userId, DateTime.Now, DateTime.Now.AddDays(7), true, "", FormsAuthentication.FormsCookiePath); s

网站用户登录认证

cookie登录后同域名下的网站保持相同的登录状态. 登录 private void SetAuthCookie(string userId, bool createPersistentCookie){ var ticket = new FormsAuthenticationTicket(2, userId, DateTime.Now, DateTime.Now.AddDays(7), true, "", FormsAuthentication.FormsCookiePath); st