记录用户在线时间

前言                                   

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

 

正文                                   

  思路:在页面加载和卸载时的把当前时刻发送到服务器,服务器端用链表保存并且该链表保存在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事件。

时间: 2024-11-08 17:30:21

记录用户在线时间的相关文章

用户在线时间最多的20个网站

一个用户在网站上停留时间(在线时间)的长短,反应出一个网站的粘度和吸引用户的能力,那么,人们最喜欢在哪些网站上停留呢?Jay Meattle给出了一组数据,显示了美国用户访问时间最长的20个网站,根据他的数据,这20个网站竟然拥有所有美国用户39%的访问时间,这些信息对于喜欢看英文内容的读者具有一定价值.下面是我翻译的译文. 时间是有限的资源,尽管我们不愿意承认,我们每天都只有24小时的时间去做事情.在2006年的12月,我们有44640分钟去做我们心中想要做的事情,不管是睡觉.吃饭.看电视.跳

php实现用户在线时间统计详解_php技巧

首先介绍一下所涉及的数据表结构,四个字段: 代码如下: 复制代码 代码如下: uid<int(10)> :用户id session_id<varchar(40)> :用户登录后系统产生的session_id,PHP可是使用session_id()函数获取 login_time<int(10)> :登录时间 logout_time<int(10)> :登出时间 1.客户端定时发送请求到服务器端.实现方法是在用户登录后,将uid,session_id,login

php下统计用户在线时间的一种尝试_php技巧

下面列出几个比较常用的方法: 首先介绍一下所涉及的数据表结构,四个字段: 复制代码 代码如下: uid<int(10)> :用户id session_id<varchar(40)> :用户登录后系统产生的session_id,PHP可是使用session_id()函数获取 login_time<int(10)> :登录时间 logout_time<int(10)> :登出时间 1. 客户端定时发送请求到服务器端.实现方法是在用户登录后,将uid,sessio

Windows 7系统的详细记录用户登录时间

微软中国Win7微博上有很多关于Win7系统的新闻.实用的小知识小技巧.丰富的Win7桌面主题壁纸.还有Win7最近更新的下载补丁等等.还有很多使用Win7的朋友在这里交流心得,还有一些轻松的娱乐和游戏信息.关注了它就等于多了一个Win7贴身助手. 最近我在微软中国Win7微博上学到一个Win7小技巧--通过设置组策略实现电脑登录信息记录.这样我的Win7就可以记录电脑的一举一动,知晓自己的电脑有没有在我离开的时候被人偷偷登录过. 点击Win7桌面左下角圆形的开始菜单按钮,在搜索框中输入:gpe

记录用户游览时间

问题描述 有一个视频学习网站,有一个章节列表.学员点击章节列表,进入播放网页,我的目的是在数据库里记录每个学员每门课的开始时间和结束时间.现在我的做法是开始时记录一下用户名.课程名和开始时间,等网页关闭时再记录结束时间.但是问题是不知道怎么执行网页关闭记录时间.我之前试过用:1.js的onbeforeunload来执行一个C#后台程序,发现根本不执行,不知道为什么.2.ajax,不是很懂,有没有大神会用的.3.重写OnUpLoad,貌似也不执行. 解决方案 解决方案二:可以ajax定时更新浏览时

Facebook广告营收增速比用户在线时间还要多

中介交易 SEO诊断淘宝客 站长团购 云主机 技术大厅 [摘要]美国成人只将6%的时间花费在Facebook上,但后者却有近10%的广告收入. 腾讯科技讯 9月21日,据市场研究公司eMarketer的最新统计数据显示,在2014年,美国成年人平均每天在Facebook上花费21分钟时间.这21分钟约占美国成年人每天花费在所有社交网络上的时间的三分之一;约占他们每天花费在数字媒体上的时间的6%;约占他们每天花费在所有媒体上的时间的2.8%.eMarketer公司预计,在2014年,美国成年人平均

ASP.NET实现用户在线检测的类源码

asp.net|在线|在线检测 //online.cs(用户在线检测)/*程序实现思路: 该用户有以下几个属性:name:用户名sessionID:用户ID,通过它唯一表示一个用户iswhere :附加信息,用户当前所在位置lasttime:用户登陆时间curtime:本次刷新时间 在客户端,使用一个IFRAME,装载一个刷新页面,每隔XX秒更新一下他的名字对应的curtime,就表示他仍然在 在服务器端,建立一个守护线程,每隔固定时间就运行一遍,然后判断当前所有用户列表中的时间间隔是否超出了规

写一个用户在线显示的程序

在开始这篇文章时,作者假设读者已能够写出一个用户的登入认证程序. ---------------------------------------------------------- 记数器可完成访问 web 页的总次数,但却不能得知一个时段中访问量的动态记载,下面就来介绍如何写一个各个时段动态显示访问量的方法. 要记载访问量,首先就要在 mysql 内建立一个数据库,姑且给这个数据库取名为 line,同时建立一个名为 line 的数据表,表内的字段分别为"用户名(name varchar(20

粗略计算在线时间,bug:ip相同_php技巧

<?PHP /* CREATE TABLE `db_online` (   `ip` char(20) default NULL,   `time` char(20) NOT NULL default '',   `name` char(200) NOT NULL default '游客' ) TYPE=MyISAM */ //粗略计算在线时间,bug:ip相同(局域网->外部网)者,只记录一人.不过几率很少 session_start(); //超时时间 $out_time=300;//60