ASP .NET MVC 3. Сессия истекла слишком быстро - PullRequest
3 голосов
/ 08 января 2012

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

My 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 г. 04:14:48 GMT

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

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

Ответы [ 4 ]

5 голосов
/ 18 января 2012

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

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

2 голосов
/ 09 января 2012

Возникла та же проблема, добавили два следующих параметра приложения:

 <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 голосов
/ 19 января 2012

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

Тайм-аут простоя пула приложений (в минутах)

Состояние сеанса - Тайм-аут сервера состояний (в секундах)

0 голосов
/ 19 января 2012

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

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

...