我已经尝试过this问题。但它并没有帮助我。所有答案似乎都不起作用。我不想检查Session是否为null,并在每种方法中重定向到其他页面。我试图在Session_end事件中重定向,但它没有工作,因为它没有与之关联的HTTP上下文。
那么,最佳做法是什么?
感谢。
答案 0 :(得分:2)
最佳做法是不要在这种情况下重定向。
假设您是网站上的用户,并且想要转到http://example.net/theInterestingBit
。
现在让我们想象你的会话已经过期了。
如果你的会话还活着,那么你想要去/theInterestingBit
,但是否则你会去/someLoginPage
"成功"?可能不是。
你想要的是去/theInterestingBit
而不关心"会话"因为这是程序员不用担心的事情。你没有这样做不是一个成功的条件,它是一个错误的条件。
所以不要重定向,而是使用HttpServerUtility.Transfer
或HttpContext.RewritePath
,以便用户仍然转到/theInterestingBit
,但这会成为登录页面或其他适当的方法来启动新的会话。确保响应使用状态代码403,因此它被恰当地标记为错误页面,而不是成功的"响应。
在global.asax或IHttpModule
的实现中执行此操作,以响应PostAcquireRequestState
事件(因为这是在适当的会话之后触发的事件 - 或者缺少事件 - 已经组)。你也可以在BeginRequest
的处理程序中执行此操作,如果你已经在那里做了一些事情的话。 global.asax更容易快速添加,但模块更容易重复使用或设置为适用于应用程序的某些部分而不是其他部分。