Я пытаюсь обнаружить тайм-аут состояния сеанса в моем приложении asp.net и не могу этого сделать. У меня есть базовый класс, производный от System.Web.UI.Page следующим образом: -Задача тайм-аута состояния сеанса ASP.NET
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. Это не реализация состояния сеанса в proc.
Заранее спасибо.
Значит, вы говорите, что IsNewSession всегда будет ложным после первого запроса? Таким образом, даже если сеанс сделал тайм-аут, код выше не будет работать, потому что IsNewSession всегда будет ложным, и код никогда не получит шанс зайти и выполнить «Session.Abandon», когда сеанс действительно заканчивается таймаутом? – user314827
IsNewSession будет действительным только для HttpRequest, который вызвал создание нового объекта сеанса. Первый запрос на сервер после таймаута должен сделать это, я считаю. – womp
Также я реализовал государственный сервер в SQL Server 2008. Это не реализация состояния сеанса в proc. – user314827