Вот почему многие системы включают таймеры на странице для указания приблизительного времени ожидания. Это сложно с интерактивными страницами. Вам действительно нужно перехватить функции ajax и посмотреть код возврата, что немного сложно.
Одна из альтернатив - использовать код, основанный на следующем, который выполняется в начале жизненного цикла страницы, и выполнить перенаправление ajax на страницу входа. В противном случае вы застреваете, пытаясь перехватить код возврата из ajax, и в asp.net, где ajax выполняется «для вас» (т. Е. Не более ручной метод, как jQuery), вы теряете эту простоту обнаружения.
http://www.eggheadcafe.com/tutorials/aspnet/7262426f-3c65-4c90-b49c-106470f1d22a/build-an-aspnet-session-timeout-redirect-control.aspx
для быстрого взлома вы можете попробовать это прямо в pre_init
http://forums.asp.net/t/1193501.aspx
Редактировать
то, что требуется, для форм таймаутов, а не сеансов. Тайм-ауты аутентификации форм работают в другом масштабе, чем тайм-ауты сеансов. Таймауты сессии обновляются при каждом запросе. Билеты на аутентификацию форм фактически не обновляются, пока не пройдет половина времени. Таким образом, если для тайм-аута установлено значение часа и отправлено в одном запросе 25 минут, сеанс сбрасывается на тайм-аут часа, тикет проверки подлинности форм не затрагивается и истекает через 35 минут! Чтобы обойти это, синхронизируйте время ожидания сеанса и билет авторизации форм. Таким образом, вы все еще можете просто проверить время ожидания сеанса. Если вам это не нравится, все равно - сделайте следующее и синхронизируйте тайм-ауты, а затем проанализируйте аутентификационный тикет и прочитайте его тайм-аут. Вы можете сделать это с помощью FormsAuthentication.Decrypt - см .:
Считывание cookie для проверки подлинности формы из кода asp.net за
Обратите внимание, что этот код требует , чтобы при входе в систему вы устанавливали какое-либо значение сеанса - в данном случае его "UniqueUserId". Также измените путь страницы входа ниже, чтобы соответствовать вашему.
protected void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
//Only access session state if it is available
if (Context.Handler is IRequiresSessionState || Context.Handler is IReadOnlySessionState)
{
//If we are authenticated AND we dont have a session here.. redirect to login page.
HttpCookie authenticationCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authenticationCookie != null)
{
FormsAuthenticationTicket authenticationTicket = FormsAuthentication.Decrypt(authenticationCookie.Value);
if (!authenticationTicket.Expired)
{
if (Session["UniqueUserId"] == null)
{
//This means for some reason the session expired before the authentication ticket. Force a login.
FormsAuthentication.SignOut();
Response.Redirect("Login.aspx", true);
return;
}
}
}
}
}