自定义session_end重定向实现?

时间:2017-05-04 22:08:34

标签: c# asp.net asp.net-mvc session

我在MVC应用程序中工作。我要求在会话结束时,应用程序应重定向到主页。我需要一般地实现这个逻辑。

我做了一些研究,看起来有一个要求是我需要在global.asax中的Session_Start中设置任何会话。然后,当会话到期时,应触发global.asax中的Session_End。在会话结束时,我需要确保:

  1. 用户被重定向到“登录”页面。我可以重定向到Session_End中的基本URL来完成此任务。
  2. 当用户重新登录时,应将其重定向到会话过期时他所在的页面
  3. 对我来说,完成上述#1和#2的最佳方式是什么?

        protected void Session_Start(object sender, EventArgs e)
        {
            Session["X"] = 1;
        }
    
        protected void Session_End(object sender, EventArgs e)
        {
    
        }
    

1 个答案:

答案 0 :(得分:0)

重定向只能在HTTP响应中发出(它是响应头,通常是302状态)。 HTTP响应只能在响应HTTP请求时发送。因此,如果您想重定向浏览器,则只能在请求下一页时执行此操作。当session_end事件发生时,您无法神奇地触及浏览器并使其执行某些操作。

将此作为服务器端事件处理不是正确的方法。您需要向页面添加Javascript以跟踪剩余的会话时间,并使用location.href而不是使用重定向。例如,对于十分钟的超时,您可以使用以下内容:

setTimeout(function(){ location.href="https://www.example.com/timeout.aspx"; }, 600000);