【问题标题】:Best practice for redirecting to a page when the user session expires用户会话到期时重定向到页面的最佳实践
【发布时间】:2014-03-12 23:42:38
【问题描述】:

我已经从this SO question 中尝试过。但这对我没有帮助。所有答案似乎都不起作用。我不想检查 Session 是否为空并在每个方法中重定向到其他页面。我尝试在 Session_end 事件中重定向,但它没有工作,因为它没有与之关联的 HTTP 上下文。

那么,最佳做法是什么?

谢谢。

【问题讨论】:

  • 您使用的是什么类型的会话?
  • @MichaelCoxon 在进程会话中

标签: c# asp.net


【解决方案1】:

在这种情况下最好不要重定向。

假设你是一个网站的用户,你想去http://example.net/theInterestingBit

现在让我们假设您的会话已过期。

如果您的会话处于活动状态,您是否希望转到/theInterestingBit,否则您会“成功”转到/someLoginPage?应该不会吧。

你想要的是去/theInterestingBit 而不关心“会话”,因为程序员需要担心的不是你。您没有这样做不是成功条件,而是错误条件。

所以不要重定向,而是使用HttpServerUtility.TransferHttpContext.RewritePath,这样用户仍会转到/theInterestingBit,但这会成为登录页面或其他适当的方式来启动新会话。确保响应使用状态码 403,以便将其适当地标记为错误页面,而不是“成功”响应。

在 global.asax 或 IHttpModule 的实现中执行此操作,以响应 PostAcquireRequestState 事件(因为这是在设置了适当的会话(或缺少会话)之后触发的事件)。如果您已经在那里做某事,您也可以在BeginRequest 的处理程序中执行此操作。 global.asax 更容易快速添加,但模块更容易重复使用或设置为适用于应用程序的某些部分而不是其他部分。

【讨论】:

    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    • 1970-01-01
    • 2015-06-22
    • 2023-04-10
    • 2010-12-27
    • 1970-01-01
    相关资源
    最近更新 更多