zoukankan      html  css  js  c++  java
  • 记录用户在线时间

    前言                                   

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

    正文                                   

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

    欢迎添加我的公众号一起深入探讨技术手艺人的那些事!

    如果您觉得本文的内容有趣就扫一下吧!捐赠互勉!
      

  • 相关阅读:
    世界各个地区WIFI 2.4G及5G信道划分表(附无线通信频率分配表)
    树莓派-基于raspivid实现拍视频
    在树莓派3b or 3a or 4a or 4b上搭建OpenWebRX
    树莓派4装热点板不启动咋板?
    portapack h1 买回来刷hackrf与使用说明
    portapack发射GPS的信号实现GPS脱机模拟器
    DMR windows 软件x64
    浅谈iOS多线程
    iOS Sonar 集成流程
    不要相信程序员在加班时间写的代码
  • 原文地址:https://www.cnblogs.com/fsjohnhuang/p/2336009.html
Copyright © 2011-2022 走看看