zoukankan      html  css  js  c++  java
  • 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);
                    }
                }
            }

  • 相关阅读:
    在Android中使用Handler和Thread线程
    getCacheDir用法
    OAuth协议
    android开发参考网站
    常用的地址
    LayoutInflater获取方式
    java for map
    ubuntu12.04+nginx+apc
    ubuntu12.04 + dropbox
    yii + 获取 control + action
  • 原文地址:https://www.cnblogs.com/gjung/p/1628449.html
Copyright © 2011-2022 走看看