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事件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值