Сеанс аутентификации истекает в ASP.NET MVC

Я хочу зарегистрировать пользователя на сайте ASP.NET MVC, и сессия заканчивается очень быстро, за несколько минут. Аутентификация выполняется в одной строке кода:

authProvider.Authenticate(model.UserName, model.Password)

Тогда у меня есть в Web.config:

<authentication mode="Forms">
<forms loginUrl="~/Account/Login" name=".ASPXAUTH" timeout="300" slidingExpiration="true"> 

и настройка на IIS на сервере за 300 минут.

В чем проблема?

1 ответ

Решение

Убедитесь, что у вас есть sessionState timeout значение, которое соответствует вашему forms timeout:

<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" 
         name=".ASPXAUTH"
         timeout="300"
         slidingExpiration="true" />
    </authentication>
    <sessionState timeout="300" mode="InProc" />
</system.web>

Вы также должны изменить Idle Time-out параметр вашего пула приложений на желаемое время ожидания аутентификации, чтобы избежать слишком быстрого повторного запуска пула приложений и, следовательно, потери ваших сеансов.

Этот параметр можно найти в:

IIS - Пулы приложений - Расширенные настройки рассматриваемого пула приложений.

Рекомендации:

Если вы не хотите изменять этот параметр (*), решение состоит в том, чтобы использовать StateServer режим состояния сеанса. Этот режим использует сервис для хранения сеанса вместо памяти с In-Process Режим. Преимущество состоит в том, что вы не теряете сеанс при повторном использовании пула приложений. Это также очень легко настроить:

<system.web>
    <sessionState mode="StateServer"
       stateConnectionString="tcpip=loopback:42424"
       cookieless="false"
       timeout="300" />
</system.web>

(*) 5 минут очень мало. По умолчанию это 20 минут. Поэтому я советую установить по крайней мере значение по умолчанию, если вы используете StateServer Режим.

Ссылка:

Другие вопросы по тегам