Сеанс asp.net mvc часто истекает в среде размещения

Если у кого-то еще есть такая же проблема и она решена, был бы признателен, если бы он поделился своим решением:

Проблема: у меня есть веб-сайт, созданный в asp.net mvc3, срок действия сеанса часто истекает, от нескольких секунд до 5 минут. В web.config я установил тайм-аут на 2880 минут, я также установил состояние сеанса на stateserver. Я также удаляю тайм-ауты, чтобы использовать их по умолчанию, все еще проблема:

<sessionState mode="StateServer"></sessionState>
<authentication mode="Forms">
   <forms loginUrl="~/Account/LogOn"/>
</authentication>

Я сделал пример веб-сайта, который содержит только функции входа в систему и некоторое взаимодействие с базой данных для имитации среды, затем я получил более стабильный тайм-аут 2 минуты 50 секунд (проверено 9 раз), что все еще неверно, так как я установил 2880 минут в веб.конфиг.

Внутри кода, когда пользователь входит в систему, я создаю AuthenticateTicket и сохраняю его в файлы cookie, затем на защищенных страницах я проверяю User.Identity, а контроллеры имеют фильтр [Authorize], поэтому, когда сеанс истекает, меня отправляют на страницу входа.

На том же хостинг-сервере у меня есть другие старые приложения, использующие веб-формы .NET 3.5, и для них сеанс в порядке, только для новых mvc3 и mvc3 срок действия сеанса часто истекает. Спасибо за любую подсказку, которую вы можете дать.


person Nestor    schedule 04.05.2011    source источник
comment
Размещено на серверах Arvixe   -  person Nestor    schedule 04.05.2011


Ответы (3)


Финал:

Моя конкретная проблема заключалась в том, что мой хостинг (Arvixe) установил ограничение в 100 МБ памяти для каждого веб-сайта. Использование EF (и, вероятно, любой ORM) увеличивает использование памяти из-за сложных запросов, сопоставленных с базой данных, поэтому мои веб-сайты использовали более 100 МБ, что приводило к перезапуску пула приложений из-за ограничения памяти в 100 МБ, поэтому сеанс был сброшен.

Решения:

  • Оптимизируйте свой сайт MVC (см. этот пост)
  • Используйте другой способ сохранить сеанс, возможно, сохранив его в базе данных SQL.
  • Переход на виртуальный или выделенный сервер

В моем конкретном случае настройка каждого веб-сайта на использование общего пула приложений временно решила проблему, в то время как я следую сообщению о 1-м варианте, чтобы оптимизировать свои веб-сайты, чтобы я мог выйти за пределы памяти Arvixe в 100 МБ.

person Nestor    schedule 05.05.2011
comment
В конце я снова переключился на выделенный пул приложений и сохранил сеанс на уровне сервера, используя: ‹sessionState mode=StateServer/› и ‹machineKey validationKey=ваш ключ decryptionKey=key desc validation=SHA1 decryption=AES/› - person Nestor; 21.01.2012

У меня была аналогичная проблема, мой сеанс останавливался примерно через 30 секунд, это происходило только в моей среде разработки. Я нашел свое решение здесь: http://forum.winhost.com/showthread.php?t=9017

Попробуйте добавить свой машинный ключ на свой сайт.

person Frank Folsche    schedule 26.07.2012

Это может быть распространенной проблемой при использовании виртуального хостинга по следующим причинам:

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

Ваш хост использует серверы с балансировкой нагрузки, и вы посещаете один сервер, а затем при последующем посещении вы попадаете на другой сервер, на котором нет данных сеанса.

Лучшие обходные пути:

1. Если у вас есть база данных SQL с вашим хостом, взгляните на настройку базы данных для общего состояния сеанса.

2. При написании кода не зависьте от значений в сеансе в течение длительного времени - всегда сначала выполняйте проверку, и если объект не находится в сеансе, затем перестройте объект.

3. Подумайте о переходе на VPS или о повышении тарифного плана.

person Alan Savage    schedule 04.05.2011
comment
Спасибо, спрошу на свой хостинг, и сообщу здесь, решилась проблема или нет. - person Nestor; 04.05.2011
comment
Похоже, проблема в том, что эта хостинговая компания %....$ установила нереалистичный предел памяти в 100 МБ, который, если вы используете EF, легко достигается, что приводит к перезапуску пула приложений и, следовательно, к потере сеанса. Я еще не подтвердил, но могу проверить это ASP.NET MVC и EF Код первого использования памяти - person Nestor; 04.05.2011