Asp.Net HttpApplication请求管道与Session(二)

Asp.Net 回话的创建与结束

        LogHelper.LogHelper _log = new LogHelper.LogHelper();
        /// <summary>
        /// 程序开始----隐藏事件
        /// </summary>
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            _log.WriteLine("程序开始");
        }
        /// <summary>
        /// 程序结束----隐藏事件
        /// </summary>
        protected void Application_End()
        {
            _log.WriteLine("程序结束");
        }
        /// <summary>
        /// 回话开始----隐藏事件
        /// 当用户指定浏览器第一次访问网站 创建 ASP.NET_SessionId 回话开始,
        /// 当用户关闭浏览器,再次使用相同浏览器访问网站,重新创建 ASP.NET_SessionId 新的回话开始
        /// </summary>
        protected void Session_Start()
        {
            _log.WriteLine("回话开始,count=" + Session.Count + ",回话ID:" + Session.SessionID);
            StringBuilder builder = new StringBuilder();
            foreach (string item in Session.Keys)
            {
                string line = string.Format("---{0}:{1}", item, Session[item]);
                builder.AppendLine(line);
            }
            _log.WriteLine(builder.ToString());
        }
        /// <summary>
        /// 回话结束----隐藏事件
        /// 当程序结束,清除服务器所有的回话ID,每个回话ID的删除都会触发该事件
        /// 在同一个回话ID中,只能访问当前回话中创建的Session 数据
        /// </summary>
        protected void Session_End()
        {
            _log.WriteLine("回话结束,count=" + Session.Count + ",回话ID:" + Session.SessionID);
            StringBuilder builder = new StringBuilder();
            foreach (string item in Session.Keys)
            {
                string line = string.Format("---{0}:{1}", item, Session[item]);
                builder.AppendLine(line);
            }
            _log.WriteLine(builder.ToString());
        }

1.第一次打开浏览器访问

2.添加Session数据后访问

3.关闭浏览器,再次打开访问

4.步骤跟踪

注:

1.只要当前浏览器的进程没有结束,Asp.Net SessionID的值就不会改变。

2.或者服务器端SessionID过期

3.特别说明,在Asp.Net 应用中需要HttpAppliaction的Session_Start、Session_End 方法才会启用Session状态,否则每次请求的Session状态自动过期,也就是下一次请求都是新的。

4.不同进程的Asp.Net SessionID是不相同的,也就是不同域名的SessionID不相同,如下:

 

更多:

Asp.Net HttpApplication请求管道与Session(一)

Asp.Net HttpApplication 事件汇总

ASP.NET的Application简介1

posted @ 2015-11-19 14:36  天马3798  阅读(564)  评论(0编辑  收藏  举报