Как установить время ожидания сеанса более 20 мин.? - PullRequest
5 голосов
/ 13 ноября 2009

У меня проблема в моем проекте. На моем сайте есть панель администратора. Люди могут войти с именем пользователя и паролем, могут редактировать контент сайта. Иногда пользователю может потребоваться до 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 минут.

Ответы [ 3 ]

13 голосов
/ 13 ноября 2009

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

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

IIS »Каталог» Конфигурация »Параметры А ТАКЖЕ AppPool »Свойства

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

6 голосов
/ 14 января 2010

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

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

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

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

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

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

1 голос
/ 13 ноября 2009

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

...