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. }
如何在会话结束时重定向