Я пытаюсь обнаружить тайм-аут состояния сеанса в моем приложении asp.net и не могу этого сделать. У меня есть базовый класс, производный от System.Web.UI.Page следующим образом:
public class BasePageSessionExpire : Page
{
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
if (Context.Session != null)
{
if (Session.IsNewSession)
{
string szCookieHeader = Request.Headers["Cookie"];
if ((null != szCookieHeader) && (szCookieHeader.IndexOf("ASP.NET_SessionId") > 0))
{
Session.Abandon();
Response.Redirect("~/SessionExpired.aspx",true);
}
}
}
}
}
Все страницы, на которых мне нужна проверка состояния сеанса, происходят от этого базового класса, а не от «System.Web.UI.Page». Кроме того, все эти страницы имеют EnableSessionState="True". У меня есть пустой метод Session_Start() в моем файле global.asax, если это вообще актуально.
Почему-то после первого запроса свойство "Session.IsNewSession" всегда ложно. Это верно только для первого запроса, а затем всегда ложно. У меня тайм-аут установлен на 1 минуту. Сеанс никогда не истекает по тайм-ауту. Что мне здесь не хватает?
Также я реализовал сервер состояний в SQL Server 2008. Это не реализация состояния сеанса в процессе.
Заранее спасибо.