记录用户在线时间
前言
同事在弄一个叫学习空间的系统,其中需要记录用户的在线时间,于是我就帮忙实现一下,那个系统的其他部分都没参与过。不过功能实现得还可以,就小结一下也看看能不能有更好的解决方法。
正文
思路:在页面加载和卸载时的把当前时刻发送到服务器,服务器端用链表保存并且该链表保存在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事件。
- 漫谈版本控制系统
- 带你零基础入门express
- 动态控制C4C UI元素的显示和隐藏
- 深度学习(deep learning)发展史
- 遗传算法简述
- Spark详解03Job 物理执行图Job 物理执行图
- 干货|Kotlin入门第一课:从对比Java开始
- Spark详解04Shuffle 过程Shuffle 过程
- Spark详解02Job 逻辑执行图Job 逻辑执行图
- Spark详解01概览|Spark部署|执行原理概览Job 例子
- Spark详解05架构Architecture架构
- SQL Server常用命令(平时不用别忘了)
- Spark详解06容错机制Cache 和 Checkpoint Cache 和 Checkpoint
- SQL Server 学习笔记
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- PHP中__set()实例用法和基础讲解
- laravel框架分组控制器和分组路由实现方法示例
- 使用swoole 定时器变更超时未支付订单状态的解决方案
- Yii2 queue的队列使用详解
- ThinkPHP5+jQuery+MySql实现投票功能
- Smarty模板配置实例简析
- php利用ZipArchive类操作文件的实例
- Yii框架页面渲染操作实例详解
- PHP数据源架构模式之表入口模式实例分析
- PHP pthread拓展使用和注意点
- centos6.5下安装zabbix2.4的教程图解
- php经典趣味算法实例代码
- centos7 设置grub密码及单用户登录实例代码
- php面向对象基础详解【星际争霸游戏案例】
- Linux系统下Nginx支持ipv6配置的办法