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);
                }
            }
        }

posted on 2009-12-20 21:16  gjung  阅读(1829)  评论(0编辑  收藏  举报