Проблема тайм-аута состояния сеанса ASP.NET - PullRequest
0 голосов
/ 14 апреля 2010

Я пытаюсь определить тайм-аут состояния сеанса в приложении 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 всегда имеет значение false. Это верно только для первого запроса, а затем всегда ложно. У меня время ожидания установлено на 1 минуту. Сессия никогда не кажется тайм-аутом. Что мне здесь не хватает?

Также я реализовал сервер состояний в SQL Server 2008. Это не реализация состояния сеанса внутри процесса.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 01 декабря 2011

Поскольку у вас есть событие Session_start в файле global.asax, после истечения сеанса Session_start снова запускается. это означает, что идентификатор сессии уже создан, и поэтому событие isinewSessionId oninit вернет false, поскольку идентификатор сессии уже создан.

Таким образом, удаление события Session_Start будет работать.

Дайте мне знать, работает ли это решение для вас.

0 голосов
/ 01 декабря 2011

В вашем приложении, если нет события Session_Start, тогда каждый раз IsNewSession будет возвращать true для каждой обратной передачи, если только вы не сохраните какое-либо значение в сеансе.

Как только вы сохраните какое-то значение в сеансе, IsNewSession вернет false в следующий раз, даже если многие ответят.

Как только сессия истечет, IsNewSession будет возвращать true, пока сессия не будет сохранена.

0 голосов
/ 14 апреля 2010

Сеанс ASP.Net запускается по первому запросу пользователя на сервер. Это единственный раз, когда IsNewSession будет правдой.

Вызов Session.Abandon () удаляет текущий сеанс, а затем, если вы перенаправите пользователя на страницу SessionExpired, начнется новый сеанс.

Я не уверен, почему тайм-аут не будет срабатывать. Вы поместили код в событие Global.asax Session_End, чтобы убедиться, что сеансы не заканчиваются?

...