通过Global.asax文件里面的Session_End事件记录用户退出 (or session timeout)
2016-04-26 17:14
519 查看
Session.Abandon()和timeout会触发Global.asax的Session_End事件。可以通过这个事件来记录用户退出或者session timeout,这样每个用户都会有一条登陆和退出记录。
退出登陆调用方法:
Session_End事件代码:
有如下几点需要注意:
1. 尽管我们先调用Session.Abandon(),但是在Session_End事件里还是可以继续访问所有session的值。正是因为这个,所以我们可以在PerformLogout方法中给Session["PerformLogout"]赋值,然后通过这个值来判断Session_End事件是由用户登出触发还是由session timeout触发。
2. ASP.NET里面Session和HttpContext.Current.Session对象都指向System.Web.SessionState.HttpSessionState,大部分地方这两个对象可以互换使用,但是在Session_End事件里,HttpContext.Current返回的是null,所以只能通过Session对象来访问session值。为什么要这样写,参考这里
3. 引起session timeout的设置比较多,测试过的有web.config里面的sessionState timeout, IIS Application Pools的Idle Time-out, IIS Application Pools Recycle, Stop website, 修改web.config等。
https://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon(v=vs.110).aspx http://forums.asp.net/t/1275683.aspx?Can+t+access+to+Session+variable+inside+Session_End+Event http://stackoverflow.com/questions/940742/difference-between-session-and-httpcontext-current-session http://stackoverflow.com/questions/27657773/why-is-httpcontext-current-null-during-the-session-end-event http://stackoverflow.com/questions/19509672/why-is-httpcontext-current-null http://stackoverflow.com/questions/12294532/asp-net-values-of-session-variables-in-session-end-event https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx https://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end.aspx http://stackoverflow.com/questions/13264212/on-session-timeout-capture-info http://www.beansoftware.com/ASP.NET-Tutorials/Find-If-Session-Expired.aspx
退出登陆调用方法:
public void PerformLogout() { HttpContext.Current.Session["PerformLogout"] = true; HttpContext.Current.Session.Abandon(); }
Session_End事件代码:
protected void Session_End(Object sender, EventArgs e) { BusinessContext bizContext = (BusinessContext)Session["BusinessContext"]; string loginID = string.IsNullOrEmpty(bizContext.LoginID) ? "" : bizContext.LoginID; string title = "Timeout"; if (Convert.ToBoolean(Session["PerformLogout"])) { title = "Logout"; } BusinessEvent.Log(BizLogCategory.SECURITY, BizLogModule.USER_AUTHENTICATION, title, "[PerformLogout]Logout Successfully", "LoginID: " + loginID, bizContext); }
有如下几点需要注意:
1. 尽管我们先调用Session.Abandon(),但是在Session_End事件里还是可以继续访问所有session的值。正是因为这个,所以我们可以在PerformLogout方法中给Session["PerformLogout"]赋值,然后通过这个值来判断Session_End事件是由用户登出触发还是由session timeout触发。
2. ASP.NET里面Session和HttpContext.Current.Session对象都指向System.Web.SessionState.HttpSessionState,大部分地方这两个对象可以互换使用,但是在Session_End事件里,HttpContext.Current返回的是null,所以只能通过Session对象来访问session值。为什么要这样写,参考这里
3. 引起session timeout的设置比较多,测试过的有web.config里面的sessionState timeout, IIS Application Pools的Idle Time-out, IIS Application Pools Recycle, Stop website, 修改web.config等。
https://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end(v=vs.110).aspx https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon(v=vs.110).aspx http://forums.asp.net/t/1275683.aspx?Can+t+access+to+Session+variable+inside+Session_End+Event http://stackoverflow.com/questions/940742/difference-between-session-and-httpcontext-current-session http://stackoverflow.com/questions/27657773/why-is-httpcontext-current-null-during-the-session-end-event http://stackoverflow.com/questions/19509672/why-is-httpcontext-current-null http://stackoverflow.com/questions/12294532/asp-net-values-of-session-variables-in-session-end-event https://msdn.microsoft.com/en-us/library/system.web.sessionstate.httpsessionstate.abandon.aspx https://msdn.microsoft.com/en-us/library/system.web.sessionstate.sessionstatemodule.end.aspx http://stackoverflow.com/questions/13264212/on-session-timeout-capture-info http://www.beansoftware.com/ASP.NET-Tutorials/Find-If-Session-Expired.aspx
相关文章推荐
- BMC
- h5第一章第五节
- latex论文插图位置问题
- JavaScript 事件
- iOS开发_统计xcode代码行数
- HDOJ3231醉
- Java Socket
- 单片机延时函数
- jquery dataTable参数
- linux系统编程之进程(二):进程生命周期与PCB(进程控制块)
- 绝对不容错过,ButterKnife使用详谈
- FILE
- java基础数据遍历(4)删除数组中重复数字
- [Spring入门点滴]利用构造函数和setter注入
- 班级派团队项目小计(九)
- 运维工作必备----------编译安装LAMP
- 关于pdf阅读——SumatraPDF
- multer中间件上传文件
- 【DirectX11-Tutorial】窗口大小和客户端区域大小Window Size and Client Size
- 产品研发杂谈(GJB5000A)