Global.asax.cs中的Session_End未使用表单身份validation触发

我有一个asp.net 4.0应用程序,使用表单身份validation设置为45分钟超时。 我想在会话过期时将用户重定向到超时页面。 谁能告诉我怎么做? 我正在运行.net 4.0。

web.config有:

    

Global.asax.cs文件具有:

 void Session_End(object sender, EventArgs e) { Response.Redirect("~/Timeout.aspx"); } 

Session_End方法中无法进行重定向。 它不是由于请求而运行,因此它没有Response对象,并且没有响应任何地方的重定向。

由于会话过期,在浏览器中无法执行任何操作。 HTTP协议是面向请求的,因此没有浏览器要求它就无法将消息从服​​务器推送到浏览器。

浏览器无法确定会话是否已过期。 如果您要轮询服务器以检查会话是否已过期,它将使会话保持活动状态,从而破坏超时的目的。

您可以使用客户端脚本在45分钟后进行重定向:

 window.setTimeout(function() { window.location.href = '/Timeout.aspx'; }, 1000*45*60); 

但是,这将仅基于此浏览器窗口上次联系服务器以来的时间进行重定向。 如果同一会话有多个浏览器窗口,则会话可能实际上没有超时。

你的会话状态如何实现? Session_End仅在使用InProc时有效。

见http://www.eggheadcafe.com/articles/20021016.asp

在MVC上,您可以在_ViewStart.cshtml中添加此代码

_ViewStart.cshtml:

 @{ Response.AddHeader("Refresh",Convert.ToString((Session.Timeout * 60) + 5)); if(Session.IsNewSession) Response.Redirect(“Logout.aspx");// or another page which you want. } 

如何在会话结束时重定向