Альтернативное название: Как перенаправить по истечении времени ожидания сеанса
ЗАКЛЮЧИТЕЛЬНОЕ РЕШЕНИЕ: Благодарность: Робин Дей (хотя я тестировал решение Бена, и оно тоже работает, и оба других решения также являются хорошими решениями)
Я избавился от базовой страницы, которая была у меня изначально.
Поместите это в Session_Start of Global.asax
void Session_Start(object sender, EventArgs e)
{
string cookie = Request.Headers["Cookie"];
// Code that runs when a new session is started
if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))//&& !Request.QueryString["timeout"].ToString().Equals("yes"))
{
if(Request.QueryString["timeout"] == null || !Request.QueryString["timeout"].ToString().Equals("yes"))
Response.Redirect("Default.aspx?timeout=yes");
}
}
Поместите это на страницу Defualt.aspx:
if (!IsPostBack)
{
if (Request.QueryString["timeout"] != null && Request.QueryString["timeout"].ToString().Equals("yes"))
{
Response.Write("<script>" +
"alert('Your Session has Timedout due to Inactivity');" +
"location.href='Default.aspx';" +
"</script>");
}
}
Это решение работает, даже если время ожидания истекает на странице Default.aspx.
END SOLUTION
У меня есть базовая страница, которая проверяет время ожидания сеанса.(это все, что он делает).Я хочу перенаправить на домашнюю страницу, если есть время ожидания сеанса.Однако домашняя страница также наследуется от этой базовой страницы.
Я не уверен, правильно ли я объясняю это:
Шаг 1: одна из моих страниц загружается
Шаг 2: он длится более 20 минут (это может привести к тайм-ауту сеанса).
Шаг 3: я нажимаю на то, что вызывает poastback
Шаг 4: Базовая страница обнаруживает тайм-аут и перенаправляет наdefault.aspx
Шаг 5. При загрузке default.aspx базовая страница обнаруживает, что время истекло, и снова пытается перенаправить на default.aspx.Шаг 6: Повторите шаг 5
Жирным шрифтом обозначен нежелательный эффект ...
Это код базовой страницы.
using System;
using System.Web.UI;
public class SessionCheck : System.Web.UI.Page
{
public SessionCheck() {}
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
if (Context.Session != null)
{
//check the IsNewSession value, this will tell us if the session has been reset.
//IsNewSession will also let us know if the users session has timed out
if (Session.IsNewSession)
{
//now we know it's a new session, so we check to see if a cookie is present
string cookie = Request.Headers["Cookie"];
//now we determine if there is a cookie does it contains what we're looking for
if ((null != cookie) && (cookie.IndexOf("ASP.NET_SessionId") >= 0))
{
//since it's a new session but a ASP.Net cookie exist we know
//the session has expired so we need to redirect them
Response.Redirect("Default.aspx?timeout=yes&success=no");
}
}
}
}
}
Спасибо !!!
(Если вам нужны дополнительные разъяснения, пожалуйста, спросите)
Примечание: я знаю, что если я перенаправлю на страницу, которая не наследуется от этой базовой страницы, это решит проблему.Но мне не нравится это решение.