• application 和 session区别以及使用application存储在线用户的session信息


    application  和 session区别

    1)、生命周期不同

    application     整个应用程序的生命期

    session         用户活动时间+一段延迟时间(一般为20分钟)

    2)、保存的数据不同

    Application     用于保存所有用户的公共的数据信息

    session          用于存储单个用户的数据

     

    application存储在线用户的session信息的示列

    如果我们用session保存每个用户的登录信息

    以下示例将展示将所有用户的登录信息保存到Application中的做法

    首先:

    我们在Global.asax的Application_Start事件中添加下边的语句:

          //在线用户列表
          Application["OnlineUsers"] = new Hashtable();

    然后:在每个用户登录的时候,执行下边的语句

          HttpContext.Current.Session["UpdateTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); 

          ((Hashtable)(HttpContext.Current.Application["OnlineUsers"])).Add(empid, HttpContext.Current.Session)

    最后:我们展示用Application实现在线用户检测的功能,就能Application中始终保存在线的用户的Session

    1)、在Global.asax的Session_Start事件中添加下边的语句:

            // 将会话失效时间设置为5分钟

             Session.Timeout =5;

    2)、使用js每1分钟调用一次后台的一个web服务,不做任何工作,用于重新开始会话的记时。

        同时更新Application中该用户Session的时间戳。

              Hashtable s_onlineUsersHash = (Hashtable)(HttpContext.Current.Application["OnlineUsers"]);
              System.Web.SessionState.HttpSessionState ses = (System.Web.SessionState.HttpSessionState)(s_onlineUsersHash[empid]);
              ses["UpdateTime"] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");

    3)、使用js每2分钟调用一次后台的一个web服务,用于清除不活动的用户:

            DateTime Now;
            Now = DateTime.Now;
            TimeSpan ts = new TimeSpan(0, 0, 120);//120秒的时间差
            System.Web.SessionState.HttpSessionState ses;

            //删除不活动的用户
            Hashtable s_onlineUsersHash = (Hashtable)Application["OnlineUsers"];
            //将意外结束的用户从列表中去除。
            ArrayList hxKey = new ArrayList(s_onlineUsersHash.Keys);
            foreach (string s_empid in hxKey)
            {
                //如果客户端有120秒不提交更新时间戳,则说明客户端已经非正常退出(断电、进程意外结束等),清除session信息。
                ses = (System.Web.SessionState.HttpSessionState)(s_onlineUsersHash[s_empid]);
                DateTime LastUpdateTime = DateTime.Parse(ses["UpdateTime"].ToString());
                if (Now - LastUpdateTime > ts)
                {
                    try
                    {
                        ((Hashtable)(HttpContext.Current.Application["OnlineUsers"])).Remove(s_empid);
                    }
                    catch
                    {
                        ((Hashtable)(HttpContext.Current.Application["OnlineUsers"])).Remove(s_empid);
                    }
                }
            }

  • 相关阅读:
    el-checkbox
    文件上传优化
    二叉树的建立
    二叉树的遍历算法
    两个二进制数多少个位(bit)不同
    二维矩阵置零
    search-a-2d-matrix(二维矩阵查找)
    Ubuntu16.04安装配置Eclipse 以及opencv的使用
    树莓派 自身摄像头的opencv调用
    树莓派3上安装Qt5
  • 原文地址:https://www.cnblogs.com/gjung/p/1628449.html
Copyright © 2020-2023  润新知