Почему мои пользователи выходят из системы через минуту или около того? - PullRequest
8 голосов
/ 02 января 2011

У меня есть сайт Asp Mvc 2 с использованием аутентификации форм.Когда я запускаю его локально, я могу войти в систему и оставаться в системе на неопределенный срок.

Однако, когда я помещаю его на сервер, я, кажется, остаюсь в системе только в течение нескольких минут, а затем, по-видимому, выхожу из системы.Я посмотрел на куки, и есть 2, которые кажутся актуальными:

.ASPXAUTH, который является сессионным куки .ASPXANONYMOUS, срок действия которого истекает через 3 месяца.

Когда я обновляю страницу, куки остаются прежними до тех пор, пока я не выйду из системы, когда мне кажется, что я получаю новый файл .ASPXANONYMOUS, но .ASPXAUTH кажется таким же.

ЭтоКажется, что я могу оставаться в системе, пока не сделаю что-нибудь через определенное время.Если я отправляю форму сразу после входа в систему, она работает нормально, но если я продолжаю отправлять данные снова и снова, то через минуту или около того одна из отправок произойдет как пользователь, вышедший из системы, а не как пользователь, которыйвошел в систему, что все остальные представления работали как.

Что может вызвать это поведение и как я могу отследить, что отличается и изменить его, чтобы я мог оставаться в системе в течение неопределенного времени?

EDIT ,

это один сервер, но после некоторого дополнительного исследования и поиска вероятным кандидатом кажется то, что я использую более 100 МБ на сервере, и пул приложений перерабатывается.Полагаю, теперь мне нужно знать

  • Как проверить, сколько памяти я использую.
  • Какой совет есть, чтобы уменьшить это.

Ответы [ 5 ]

12 голосов
/ 02 января 2011

Может ли быть, что приложение ASP.NET перезапускается или завершает работу (например, из-за простоя или недавно построенных / измененных сборок)?

Когда веб-приложение ASP.NET запускает егопо умолчанию генерирует ключи шифрования для просмотра состояния и файлов cookie сеанса.Это приведет к аннулированию любых таких данных, первоначально предоставленных из более раннего запуска приложения (или из другой системы).

Чтобы сеансы выдерживали циклы приложений ASP.NET (и многосерверные фермы), вы можете указать ключив вашем web.config:

<system.web>
  ...
  <machineKey
    decryption="AES"
    validation="SHA1"
    decryptionKey="..."
    validationKey="..."
  />

, где decryptionKey и validationKey - шестнадцатеричные строки длины в зависимости от алгоритма (с AES: 64 цифры и SHA1: 128, для других алгоритмов проверьте MSDN ).

Эти ключи должны быть сгенерированы криптографически, и .NET имеет типы для этого, которые можно использовать из PowerShell:

$rng = New-Object "System.Security.Cryptography.RNGCryptoServiceProvider"
$bytes = [Array]::CreateInstance([byte], 16)
$rng.GetBytes($bytes)
$bytes | ForEach-Object -begin { $s = "" } -process { $s = $s + ("{0:X2}" -f $_) } -end { $s}

Для AES используйте вышеуказанный массивдлина, для SHA1 используйте длину 64.

1 голос
/ 12 декабря 2018

Пришел сюда с похожей проблемой, следуя предложению @Richard, я посмотрел настройки утилизации в пулах приложений. Я обнаружил, что настройки были изменены, а значение Regular time intervals (in minutes) было установлено на 1 минуту. Это означало, что пул приложений перерабатывался каждую минуту.

Чтобы изменить это, щелкните правой кнопкой мыши пул приложений, выберите параметр Recycling, измените значение в Regular time intervals (in minutes). Я установил его на то же значение, что и другие пулы приложений.

Which setting to change

Это изменение устранило проблему, оказалось, что какое-то время назад оно было установлено на низкое значение, в то время как во время неправильного поиска неисправностей с истекшим сертификатом SSL.

1 голос
/ 16 октября 2011

Проверьте раздел аутентификации webconfig

<authentication mode="Forms">
   <forms name="UniqueName" loginUrl="login.aspx" path="/"  >
    </forms>
</authentication>

Убедитесь, что имя файла cookie аутентификации для каждого размещенного сайта уникально.

1 голос
/ 02 января 2011

Вполне вероятно, что время ожидания сеанса на веб-сервере настроено на гораздо меньшее время, чем вы установили в конфигурации проверки подлинности формы в web.config.

Время ожидания сеанса по умолчанию составляет 20 минут для IIS6 и IIS7.

Если у вас есть доступ к интерфейсу администратора веб-сервера, вы можете увеличить время ожидания через графический интерфейс, но его также можно установить из файла конфигурации, если ваш IIS7 использует секции <sessionState> и <sessionPageState>:

http://msdn.microsoft.com/en-us/library/cc725820(v=ws.10).aspx

0 голосов
/ 25 февраля 2018

Если ни один из этих способов не работает, проверьте пулы приложений и убедитесь, что время ожидания простоя установлено на 20+ минут. Нажмите на пул приложений, выберите ссылку Advanced Settings справа, найдите раздел Process Model и увеличьте значение Idle Timeout.

...