记录用户在线时间

简介:

前言                                   

  同事在弄一个叫学习空间的系统,其中需要记录用户的在线时间,于是我就帮忙实现一下,那个系统的其他部分都没参与过。不过功能实现得还可以,就小结一下也看看能不能有更好的解决方法。

 

正文                                   

  思路:在页面加载和卸载时的把当前时刻发送到服务器,服务器端用链表保存并且该链表保存在Session中,但Session过期时检索该链表获取最小和最大值并相减,那就得到了用户在线时间了。

  前提:Session mode要设为 InProc,不然永不过期哦!

下面是具体实现例子:

     目录结构

RecordTime用于记录加载、卸载、登录、退出的时刻;

Logout处理注销操作;

Global.asax中的Session_End方法用于处理链表并获取、保存最终在线时间结果。

AjaxHasPool是自己封装的Ajax调用对象,图个方便而已!

源代码下载

源代码使用说明:在Global.asax的Session_End方法中设断点,使用调试模式启动就可以看到结果值。

插曲:本来打算在Session_End中使用HttpContext.Current.Application来保存结果值,然后再获取并显示到 页面上。不料原来在Session_End中是获取不料HttpContext.Current。具体原因是:Session_End事件是由服务器内部 激发的事件处理函数,由服务器的内部计时器启动,这时服务器没有接收到相关的请求就没有进入管道模型中生成HttpContext对象,所以无法获取 HttpContext.Current对象,就更别说什么Application、Request对象了。而Session_End事件的发生时间是 1.Session过期;2.调用Session.Abandon()后,该次请求/响应处理结束时,所以执行Session.Abandon()后,客 户端必须至少有一次请求,才能正确反应Session的状态。

参考:http://www.cnblogs.com/cnxcfeng/articles/1189171.html

注意:因Session是保存在Asp.net进程的AppDomain中,当进程结束或崩溃时会触发Session_End事件。

目录
相关文章
|
8天前
|
Linux 开发工具 数据安全/隐私保护
codigger体验过程记录
【10月更文挑战第20天】codigger的体验过程
|
3月前
查看用户登录时间以及命令历史
查看用户登录时间以及命令历史
71 0
uniapp写一个随时间变化的预约日期列表
const today = new Date(); const dateArray = []; const dayOfWeekArray = []; const yearMonthDayArray = [];
90 0
|
存储 NoSQL Java
【Java项目】如何设计一个用户签到系统?并且这个签到系统支持7天,14天等不同天数的连续签到功能?
【Java项目】如何设计一个用户签到系统?并且这个签到系统支持7天,14天等不同天数的连续签到功能?
367 0
|
应用服务中间件
【JavaWeb】案例一:记录用户的上次访问时间
本期主要介绍案例一:记录用户的上次访问时间
194 0
【JavaWeb】案例一:记录用户的上次访问时间
|
Web App开发 JavaScript PHP
记录VisualSVNServer配置在线密码修改功能
VisualSVN Server使用的是64位版 查看对应的apache版本号是 2.2.32.这个版本需要使用php5.5以下的,且需要使用64位的php。 下载php 5.4 的64位版本。 php的下载地址:官网地址:http://windows.php.net/download/ http://windows.php.net/downloads/pecl/releases/ 官网从5.5开始才提供了64位的bin包下载。
3180 0
|
监控 安全 Java
CAS在线用户统计实现
随着应用平台的不断发展,对统一认证的能力需求越来越广泛。CAS框架在交付项目中承载了所有应用的登录能力,对平台用户登录状态统一管理。为了满足平台监控、日志等方面对用户实时在线情况展示的需求,需要在CAS server端开放rest api,实现用户在线数据统计。
|
存储 测试技术 开发工具
BSTestRunner增加历史执行记录展示和重试功能
之前对于用例的失败重试,和用例的历史测试记录存储展示做了很多的描述呢,但是都是基于各个项目呢,不方便使用,为了更好的使用,我们对这里进行抽离,抽离出来一个单独的模块,集成到BSTestRunner中,以后我们使用BSTestRunner直接就可以使用里面的失败重试和展示历史记录了。
BSTestRunner增加历史执行记录展示和重试功能
|
中间件 关系型数据库 MySQL
记一次保留订单历史记录的方案讨论
记一次保留订单历史记录的方案讨论
262 0
|
Oracle 关系型数据库 Shell
[自制工具]批量后台更新统计信息
Oracle数据库有时需要批量收集数据库的统计信息,如在大量数据迁移或大量数据更新以后,但是收集的时间可能会较长,为了避免网络中断等意外情况可能引起的麻烦,今天调试了这个小脚本,可以分用户批量执行,同时记录执行时间等日志信息,比较实用。
214 0