Как установить время ожидания сеанса более 20 минут?

У меня проблема в моем проекте. На моем сайте есть панель администратора. Люди могут войти в систему с именем пользователя и паролем, могут редактировать содержимое веб-сайта. Иногда пользователю может потребоваться до 30-40 минут для ввода содержимого, но время ожидания сеанса истекает всего через 20 минут.

Я пытался настроить это в web.config, например:

<authentication mode="Windows"/>
<sessionState timeout="60" />

а вот так:

<system.web>
    <sessionState timeout="60"></sessionState>
</system.web>

а также пробовал в моей форме так:

if (ds.Tables["LOG"].Rows.Count > 0)           
{
    Session["IsLoggedIn"] = "true";        
    Session.Timeout = 60;            
    Response.Redirect("Default.aspx");       
}        
else       
{                
    Label1.Text = "Username/Password is wrong!!";    
}

Ни одно из вышеперечисленных решений не сработало. Пробовал и по отдельности и вместе, но сессия все равно истекает через 20 минут.


person Mehmet Kaleli    schedule 12.11.2009    source источник
comment
На самом деле это не связано с вашим вопросом, но вы должны рассмотреть более приятное сообщение об ошибке при неудачном входе в систему.   -  person Brandon    schedule 13.11.2009
comment
Вы должны исправить свое приложение, чтобы любые тайм-ауты не имели значения — пользователи отправляют свой контент, им предлагается снова войти в систему, и их контент не теряется. Если вы собираетесь использовать тайм-ауты, кто-то их выполнит, как бы долго вы их ни делали.   -  person RichieHindle    schedule 13.11.2009
comment
Я лучше написал сообщение об ошибке на турецком, Брэндон, не волнуйся :)   -  person Mehmet Kaleli    schedule 13.11.2009
comment
Ты прав, Ричи, но я хочу узнать, почему это не работает.   -  person Mehmet Kaleli    schedule 13.11.2009
comment
Используете ли вы проверку подлинности с помощью форм ASP.NET?   -  person Kev    schedule 13.11.2009


Ответы (3)


Еще один совет: посмотрите на настройки IIS. Когда мне пришлось изменить время ожидания, мне также пришлось внести некоторые изменения на стороне сервера. Проверьте параметр Idle Time-out для пула приложений. Если сайт простаивает (думаю, по умолчанию это 5 минут), пул приложений отключается для экономии ресурсов сервера. Это также убьет сеанс.

Попробуйте увеличить время простоя для пула приложений, чтобы увидеть, поможет ли это вообще.

IIS » Каталог » Конфигурация » Параметры и пул приложений » Свойства

Очевидно, что если вы находитесь в среде общего хостинга, вы, скорее всего, не сможете настроить это.

person Webking    schedule 12.11.2009
comment
к сожалению я нахожусь на виртуальном хостинге Qubar. - person Mehmet Kaleli; 13.11.2009
comment
Когда я столкнулся с ситуацией, казалось, что тайм-аут сеанса IIS всегда превалировал над тем, что было определено в web.config. Нам пришлось увеличить время работы IIS до 60 минут. Попробуйте связаться с вашим общим провайдером, чтобы узнать, что они установили для тайм-аута сеанса, и есть ли что-нибудь, что вы можете с этим поделать. - person BStruthers; 13.11.2009

Когда вы используете режим состояния сеанса по умолчанию «InProc» (в процессе), как и вы, данные состояния сеанса очень хрупкие и теряются при каждом перезапуске AppPool.

Рассмотрите возможность использования других встроенных режимов состояния сеанса, которые выполняются вне процесса и, следовательно, невосприимчивы к перезапуску AppPool. Это режим «StateServer» (выполняется в памяти в отдельном процессе) и режим «SqlServer» (данные состояния хранятся в БД SQL Server).

Вы захотите использовать один из этих режимов состояния сеанса вне процесса, чтобы повысить надежность данных сеанса, особенно если вам требуются более длительные тайм-ауты сеанса. Это не отвечает на ваш вопрос о том, почему ваш сеанс истекает преждевременно, но это будет частью решения.

Различные режимы состояния сеанса имеют свои сильные и слабые стороны с точки зрения надежности, требований к памяти, масштабируемости и производительности, поэтому вам необходимо ознакомиться с ними, чтобы определить правильный выбор для вашего приложения.

В качестве примечания всегда учитывайте, нужно ли вообще вашим данным передаваться в сеанс. Обычно лучше использовать ViewState, когда данные требуются между обратными передачами на одной и той же странице, при условии, что объем данных не слишком велик. Вполне возможно разрабатывать приложения ASP.NET, которые вообще не используют сеанс или используют его очень экономно, и, как правило, я считаю, что все работает намного более интуитивно, когда вы не используете сеанс, например. кнопку браузера «Назад». Ваша БД предназначена для сохранения ваших данных, поэтому не стесняйтесь ее использовать. Если вы передаете таблицы или наборы данных между страницами с помощью сеанса, подумайте, действительно ли вам это нужно. Не могли бы вы передать параметры через строку запроса, а затем использовать параметры для извлечения данных из вашей БД при запросе страницы?

См.: Режимы состояния сеанса MSDN

person saille    schedule 14.01.2010
comment
СПАСИБО !!!!!! Случайно увидел этот комментарий, ища что-то совершенно другое, у него были проблемы, которые вводит InProc, но так и не понял, как их исправить. Еще раз спасибо, отличный комментарий! - person Иво Недев; 27.02.2015

Вы уверены, что время сеанса истекло? Это также может быть вызвано истечением времени аутентификации (т. е. срок действия файла cookie аутентификации истекает через 20 минут). Убедитесь, что для времени ожидания сеанса и времени ожидания аутентификации установлено одно и то же значение.

person Tomas    schedule 12.11.2009