记录用户在线时间

前言                                   

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

正文                                   

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏博客园迁移

redis见解

http://blog.csdn.net/zhiguozhu/article/details/50517527 Redis 原生session与redis中的s...

2031
来自专栏扎心了老铁

redis性能调优笔记(can not get Resource from jedis pool和jedis connect time out)

对这段时间redis性能调优做一个记录。 1、单进程单线程 redis是单进程单线程实现的,如果你没有特殊的配置,redis内部默认是FIFO排队,即你对red...

7987
来自专栏GreenLeaves

WCF系列教程之WCF服务宿主与WCF服务部署

本文参考自http://www.cnblogs.com/wangweimutou/p/4377062.html,纯属读书笔记,加深记忆。 一、简介 任何一个程序...

2398
来自专栏上善若水

004-IntelliJ IDEA导出Java 可执行Jar包

保证自己的Java代码是没有问题的,在IDEA里面是可以正常运行的,然后,按下面步骤:

2622
来自专栏Esofar 开发日记

[译]RabbitMQ教程C#版 - 远程过程调用(RPC)

但是如果我们想要运行一个在远程计算机上的函数并等待其结果呢?这将是另外一回事了。这种模式通常被称为 远程过程调用 或 RPC 。

1830
来自专栏领域驱动设计DDD实战进阶

微服务实战(八):落地微服务架构到直销系统(服务高可用性)

在微服务架构风格的系统中,如果单个微服务垮掉或地址不可访问,虽然对系统的影响是有限的,但我们也必须采取一定的手段来保证每个微服务尽量可用;并且在大并发的情况下,...

2413
来自专栏算法修养

Flask 学习篇二:学习Flask过程中的记录

Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Applicati...

3289
来自专栏菩提树下的杨过

linq to sql中的自动缓存(对象跟踪)

这篇东西应该至少一年前就写的,不过因为个人太懒,一直没记下来,今天补上. linq to sql中,对于同一个DataContext上下文环境,根据表主键选择记...

2317
来自专栏AndroidTv

讲讲断点续传那点儿事提问理论基础代码示例

这次想来讲讲断点续传,以前没相关需求,所以一直没去接触,近阶段了解了之后,其实并不复杂,那么也便来写一篇记录一下,分享给大伙,也方便自己后续查阅。

1032
来自专栏张首富-小白的成长历程

redis缓存服务器

#你当前没有指定配置文件,以默认的配置文件启动,如果你想指定配置文件你可以redis-server 文件所在位置

5472

扫码关注云+社区

领取腾讯云代金券