【问题标题】:How to know the page on which session ended?如何知道哪个会话结束的页面?
【发布时间】:2017-01-21 14:21:41
【问题描述】:

我在 Global.asax.cs 的 Session_End() 中

只有当会话在特定页面上结束时,我才需要执行一项操作。参数(sender 和 eventArgs)没有任何帮助。有没有办法找出用户所在的最后一页?

提前致谢。

【问题讨论】:

    标签: c# session timeout webpage sessionend


    【解决方案1】:

    您可以在每个请求中存储 Session 中访问的最后一个页面的 URL。这样,当会话结束时(global.asax Session_End),您可以读取用户在会话结束前最后访问的页面。

    这是因为大多数事件都是由请求触发的,但除非它被明确放弃,否则会话结束是由于缺乏活动引起的。当一段时间没有请求时,由服务器确定。根据定义,不会有来自用户的任何通信指示会话正在结束。他们可能在五分钟前关闭了浏览器。

    (仅当会话状态的 HttpSessionState.Mode 属性值为 InProc 时。否则事件不会触发。)

    【讨论】:

      【解决方案2】:

      您可能可以使用HttpContext.Request 属性,但不确定会话到期后它是否仍然有效。

      在这种情况下,每次用户请求新页面时,您都需要在 cookie 中明确写入页面 URL。这样,即使会话过期,您也可以检查 cookie 对象并查看最后请求的页面是什么。

      一般情况,一旦会话到期,最终用户应该重新验证自己,因此您应该直接重定向到登录页面,如果您使用的是Forms Authentication,那么您可以说FormsAuthentication.RedirectToLoginPage();

      【讨论】:

      • 问题是,我不想做登录重定向。这是一个数据库操作,只有在特定页面上的会话超时时才需要触发。让我看看 HttpContext.Request 属性是否有帮助。
      • 所以你只需要最后一个请求的页面?在这种情况下,按照建议,您也可以将页面名称或页面网址存储在 cookie 中。
      猜你喜欢
      • 2019-11-07
      • 2010-11-05
      • 2021-12-29
      • 2013-11-17
      • 2010-11-27
      • 2012-10-12
      • 2017-07-29
      • 2015-03-25
      • 2012-04-29
      相关资源
      最近更新 更多