2017-02-16 8 views
1

Я хочу зарегистрировать пользователя на сайте 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 минут.

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

+0

Разве это не потому, что ваш 'sessionState timeout' имеет низкое значение? – krlzlx

+0

это минуты. поэтому он должен истечь через 300 минут, но истекает через 5. –

+0

Я не говорю о 'time timeout', но' sessionState timeout' – krlzlx

ответ

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.

Ссылка:

+0

Привет, так это работало два месяца. теперь это уже не так. Я вижу, что есть два файла cookie, один Cookies/.ASPXAUTH (истекает «Когда заканчивается сеанс просмотра»), а другой - в Local Storage/name моего сайта (subdomain.domain.com, но не содержит каких-либо связанных с ним метаданных?). что вы посоветуете? –

+0

Советую попробовать режим StateServer в состоянии сеанса, как описано во второй части моего ответа. – krlzlx

+0

Правильно, я упустил это. Я добавил, что и я, и я все еще теряю сессию примерно через 15 минут. Должен ли текст внутри stateConnectionString отличаться от «tcpip = loopback: 42424»? –