2012-01-08 5 views
3

У меня есть страница (View), которая через несколько секунд отправляет запросы AJAX. Пользователь может работать с этой страницей очень долго. Но сеанс закончился примерно через 40-60 минут. Поэтому AJAX-запросы не возвращают полезную информацию.ASP.NET MVC 3. Сессия слишком быстро завершилась

Мои Web.config

<system.web> 
    <sessionState 
     timeout="259200" 
     cookieName="SunTest.SessionId" 
     regenerateExpiredSessionId="true" 
     sqlCommandTimeout="200" 
     stateNetworkTimeout="200"> 
    </sessionState> 
<roleManager enabled="true" defaultProvider="SqlProvider" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="259200" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"> 
    <providers> 
    <add name="SqlProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlServices" applicationName="/" /> 
    </providers> 
</roleManager> 
<authentication mode="Forms"> 
    <forms loginUrl="~" timeout="259200" protection="All" /> 
</authentication> 

Я изменил мой web.config

<appSettings> 
    <add key="enableSimpleMembership" value="false" /> 
    <add key="autoFormsAuthentication" value="false" /> 
</appSettings> 
<system.web> 
    <sessionState 
     mode="SQLServer" 
     allowCustomSqlDatabase="true" 
     sqlConnectionString="Data Source=servername;Initial Catalog=dbname;User ID=username;Password=password" 
     timeout="259200" 
     cookieName="SunTest.SessionId" 
     regenerateExpiredSessionId="true" 
     sqlCommandTimeout="200" 
     stateNetworkTimeout="200"> 
    </sessionState> 
<roleManager createPersistentCookie="true" enabled="true" defaultProvider="SqlProvider" cacheRolesInCookie="true" cookieName=".ASPROLES" cookieTimeout="259200" cookiePath="/" cookieRequireSSL="false" cookieSlidingExpiration="true" cookieProtection="All"> 
    <providers> 
    <add name="SqlProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="SqlServices" applicationName="/" /> 
    </providers> 
</roleManager> 
<authentication mode="Forms"> 
    <forms domain="help2b-2.hosting.parking.ru" name="ASPXFORMSAUTH" path="/" loginUrl="~" slidingExpiration="true" cookieless="UseCookies" timeout="259200" requireSSL="false" /> 
</authentication> 

Это делает эти печенья: Google Chrome screenshot

Итак, есть 3 печенье:

  • SunTest.SessionId. 301 байт. Истекает - сеанс.

  • ASPXFORMSAUTH. 301 байт. Истекает - сеанс.

  • .ASPROLES. 565 байт. Истекает - Вт, 10 июля 2012 4:14:48 GMT

Но через несколько минут (что-то около 30-40), он удаляет куки .ASPROLES. Пользователь выйдет из системы. Таким образом, запросы AJAX не работают.

Что не так с этим конфигом?

+1

<формы имя = "ASPXFORMSAUTH" path = "/" domain = "something.com" loginUrl = "~/Account/LogOn" cookieless = "UseCookies" slideExpiration = "true" timeout = "1441" requireSSL = "false" /> – Sparkle

+0

К сожалению, решил проблему. Я изменил вопрос с помощью нового web.config. –

+0

Выполняют ли ваши запросы ajax также отправку файлов cookie? Потому что они должны держать вашу сессию в живых. – linkerro

ответ

5

Все ли пользователи теряют состояние сеанса одновременно? Если это так, ваш пул приложений может быть переработан. There are several reasons why this can happen.

Я бы порекомендовал вам рассмотреть возможность настройки управления сеансом пользователя, чтобы он смог выдержать перезапуск приложений и сеансов. Here are some options.

2

была такая же проблема, добавил ниже двух AppSettings:

<add key="enableSimpleMembership" value="false" /> 
<add key="autoFormsAuthentication" value="false" /> 

Мои формы:

<forms name="ASPXFORMSAUTH" path="/" domain="something.com" loginUrl="~/Account/LogOn" cookieless="UseCookies" slidingExpiration="true" timeout="1441" requireSSL="false" /> 

хорошо работает сейчас

+0

К сожалению, это не решило проблему. Я изменил вопрос с помощью нового web.config –

0

Многие из заявленных целей MVC должны были перейти к модели без гражданства - сколько изменений вы можете сделать, чтобы перейти к модели без гражданства? Если бы вы добавляли некоторую идентифицирующую информацию к своим аякс-вызовам и делали их безстоящими, использование состояния сеанса не было бы зависимым (по сравнению с упрощенным, конечно, я не знаю, что делает ваше приложение).

Как вы создаете свой тег формы?

0

Вы используете IIS 7? В случае обратите внимание на:

ожидания тайм-аута пула приложений (минут)

состояние сеанса - государства сервера времени ожидания (в секундах)

Смежные вопросы