惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

雷峰网
雷峰网
博客园 - 聂微东
酷 壳 – CoolShell
酷 壳 – CoolShell
宝玉的分享
宝玉的分享
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
博客园_首页
博客园 - 三生石上(FineUI控件)
博客园 - 叶小钗
Apple Machine Learning Research
Apple Machine Learning Research
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
美团技术团队
小众软件
小众软件
Jina AI
Jina AI
S
SegmentFault 最新的问题
博客园 - Franky
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - gjung

收藏 Multithreaded COM server problem Python操作IHTMLDocument2用于自动化测试 svn对比文件源码 SQL SERVER LDF日志文件过大的问题 关于网络字节序和主机字节序 经度和纬度 TUXEDO 通讯缓冲区类型 TUXEDO client端示例程序 TUXEDO自带 方便查看 - gjung TUXEDO server端示例程序 TUXEDO自带 方便查看 固定资产减值准备与累计折旧会计核算的关系 固定资产折旧方法 sql server 2005的分页函数ROW_NUMBER 面向接口编程 abstract、virtual及override - gjung - 博客园 抽象类与接口的区别 用bde连接 连接sql server2005 - gjung 网页中的控件编辑状态 从sql2000 复制数据到sql2005
application 和 session区别以及使用application存储在线用户...
gjung · 2009-12-20 · via 博客园 - gjung

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