【发布时间】:2017-01-21 14:21:41
【问题描述】:
我在 Global.asax.cs 的 Session_End() 中
只有当会话在特定页面上结束时,我才需要执行一项操作。参数(sender 和 eventArgs)没有任何帮助。有没有办法找出用户所在的最后一页?
提前致谢。
【问题讨论】:
标签: c# session timeout webpage sessionend
我在 Global.asax.cs 的 Session_End() 中
只有当会话在特定页面上结束时,我才需要执行一项操作。参数(sender 和 eventArgs)没有任何帮助。有没有办法找出用户所在的最后一页?
提前致谢。
【问题讨论】:
标签: c# session timeout webpage sessionend
您可以在每个请求中存储 Session 中访问的最后一个页面的 URL。这样,当会话结束时(global.asax Session_End),您可以读取用户在会话结束前最后访问的页面。
这是因为大多数事件都是由请求触发的,但除非它被明确放弃,否则会话结束是由于缺乏活动引起的。当一段时间没有请求时,由服务器确定。根据定义,不会有来自用户的任何通信指示会话正在结束。他们可能在五分钟前关闭了浏览器。
(仅当会话状态的 HttpSessionState.Mode 属性值为 InProc 时。否则事件不会触发。)
【讨论】:
您可能可以使用HttpContext.Request 属性,但不确定会话到期后它是否仍然有效。
在这种情况下,每次用户请求新页面时,您都需要在 cookie 中明确写入页面 URL。这样,即使会话过期,您也可以检查 cookie 对象并查看最后请求的页面是什么。
一般情况,一旦会话到期,最终用户应该重新验证自己,因此您应该直接重定向到登录页面,如果您使用的是Forms Authentication,那么您可以说FormsAuthentication.RedirectToLoginPage();
【讨论】: