Сессия asp.net mvc часто заканчивается в среде хостинга - PullRequest
4 голосов
/ 04 мая 2011

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

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 05 мая 2011

Финал:

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

Решения:

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

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

2 голосов
/ 26 июля 2012

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

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

1 голос
/ 04 мая 2011

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

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

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

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

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

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

3, рассмотрите возможность перехода на VPS или обновления своего плана.

...