当我的 ASP.Net 会话超时(以及表单身份验证)并且我尝试点击一个页面时,我会自动重定向到我的默认 login.aspx 页面。
在页面加载之前,我需要确定这是否是超时情况,如果是 - 重定向到 timeout.aspx。
下面的文章指定如果 IsNewSession 为真,并且存在 sessionID cookie - 那么您将遇到超时情况。
但是在我的测试中,我遇到了超时并尝试再次登录的情况,并且 IsNewSession 等于 true 并且 sessionId cookie 仍然存在(因为它会保留整个浏览器会话),因此它说我已经计时- 当我试图重新登录时再次退出。
有没有更好的方法来完成这一切?
在我的“global.asax”文件中,我有:
void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
// Check if session state is enabled in web.config
if (Context.Session == null) return;
if (Session["user"] == null)
{
if (Session.IsNewSession)
{
HttpCookie sessionCookie = Request.Cookies["ASP.NET_SessionId"];
if ((null != sessionCookie) && !string.IsNullOrEmpty(sessionCookie.Value))
{
/* Session Timeout! */
FormsAuthentication.SignOut(); //just in case not done yet
Session.Abandon();
Response.Redirect("timeout.aspx");
}
else
{
// Cookie didn't exist - must be a brand new login
return;
}
}
else
{
// If there is no session data and the session is not new then it must be the postback of the login screen.
if ((HttpContext.Current.Request.Path.ToLower().LastIndexOf("/login.aspx") >= 0) && (Request.HttpMethod == "POST"))
{
return;
}
}
}
}