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不相同,如下:
更多: