asp.net Глобальные переменные и переменная сеанса теряют значение через 5-15 минут - PullRequest
1 голос
/ 06 декабря 2011

Я не уверен, почему, но только через некоторое время глобальные переменные моего веб-приложения теряют значение, а также переменные сеанса. Я установил в файле веб-конфигурации <sessionState timeout="60" />. Это на моем локальном хосте, я еще не разместил это на веб-сервере, может ли это быть причиной?

Ответы [ 3 ]

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

с состоянием сеанса inproc. Если пул приложений перезагружается или выключается, информация о сеансе пропадает.проверьте настройки iis, когда происходят повторные пулы приложений.Я полагаю, что по умолчанию закрывается пул приложений после 20 минут бездействия.Есть много других причин, по которым это может произойти.если вам нужен сеанс, который длится дольше, чем ваш пул приложений, вы должны вынуть его из proc и запустить на сервере состояний или в базе данных или в другом месте.

1 голос
/ 06 декабря 2011

В случае, если он работает в IIS, у вас есть Regular Time Interval (minutes) или Idle Time-out (minutes) с низким значением? Эти настройки можно найти в Advanced Settings... вашего пула приложений.

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

Это может не решить вашу проблему, но вы можете добавить следующее в OnInit страницы, чтобы определить, истекло ли время сеанса или нет:

override protected void OnInit(EventArgs e)
{
    // Initialize the base Page class.
    base.OnInit(e);
    //If the session exists
    if (Context.Session != null)
    {
        // IsNewSession indicates the session has been reset or the user's session has timed out.
        if (Session.IsNewSession)
        {
            // new session, check for a cookie. 
            string cookie = Request.Headers["Cookie"];
            // If there is a cookie does it contain ASP.NET Session ID? 
            if ((null != cookie) &&
                (cookie.IndexOf("ASP.NET_SessionId") >= 0))
            {
                // Since it's a new session but an ASP.NET cookie exists, the session has expired. Notify the user.  
                throw new Exception("Your session has timed out. ");
            }
        }
    }
}
...