Asp.net中的Session

Session 一直都在使用 也没有发现过什么异常 今天一个程序 需要在Session_End() 事件中 发现异常故查找资料并做了以下测试:
前提是 :
             在 Web.config 中将 sessionstate 模式设置为 “InProc” 时, 才会触发Session_End 事件

在程序页面中使用Session:
System.Web.HttpContext.Current.Session["user_id"] = UserID


在.cs 页面中获取的方法为
        public static int GetLoginUserID()
        {
               // 未登录
                if (System.Web.HttpContext.Current.Session["user_id"] != null)
                {
                    return Convert.ToInt32(System.Web.HttpContext.Current.Session["user_id"]);
                }
                else{
                        return -1;
                     }
        }

在Global.ascx 文件中Session_End() 事件中调用
      protected void Session_End(object sender, EventArgs e)
        {
            string userid= this.Session["user_id"].ToString();
            string CSUserid = GetLoginUserID();
        }

在页面中已经为Session["user_id"]赋过值
System.Web.HttpContext.Current.Session["user_id"]=123;

但是执行结果为 userid等于123 但是CSUserid则报错(该对象在上下文中无效)
结论:在Cs文件中只能通过访问System.Web.HttpContext.Current.Session[name]来获取Session值(一家之言 不知道是否有别的方法可以获取到Session并能被global文件所调取,如有异议,欢迎斧正啊) 可是在Global文件中无法访问到System.Web.HttpContext命名空间 当然那些页面级的命名空间也无法访问了 比如最常用的Response ,Request。this.Session["user_id"]这样就直接可以获取到值


在做一点补充啊:
在做这个测试过程中也用到了Session_Start事件 它与Session_End
当一个网站的所有Session变量全部过期 Session_End 事件触发 Session_Start 则是该网站内如果所有的Session全部过期活着根本没有Session变量时当第一个Session变量建立时触发Session_Start事件 (只有在建立第一个时才触发啊) 如果有多个则之后的Session变量创建都不会触发Session_Start事件


你可能感兴趣的:(Global Session)