Время проверки подлинности форм, когда это не должно? - PullRequest
4 голосов
/ 21 ноября 2008

У меня проблема с приложением ASP.NET, которое сводит меня с ума.

Когда пользователь оставляет страницу неактивной в течение периода времени, в течение которого сеанс истекает, и выдается ошибка из-за невозможности разрешения переменных сеанса (в любом случае я буду перехватывать эту ошибку, но это не проблема). Я кодировал «дефиблятор», который будет выполнять невидимую обратную передачу после того, как истечет половина времени ожидания сеанса, и это, кажется, работает нормально - оставление приложения на 30 минут не вызывало ошибку, даже если время ожидания сеанса было установлено на 20 минут. Однако сегодня утром один из других разработчиков испытал таймаут - как это возможно?

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

Полагаю, я мог бы обойти проблему, установив время аутентификации на 8 часов или около того, но это плохое решение.

Кто-нибудь может пролить свет на это?

Заранее спасибо

[Edit 24/11/2008] Просмотр файлов журналов оказался поучительным и запутанным. Я могу видеть, как дефригатор сработал после 10 минут бездействия, но, хотя Session_Id, по-видимому, является постоянным, идентификатор билета для аутентификации форм изменяется - не уверен, должен ли он или нет. Я сейчас формулирую план тестирования и опубликую его, когда закончу. Спасибо всем, кто оставил отзыв.

[Редактировать 24/11/2008] Что ж, я в тупике - в данный момент все работает нормально! Билет аутентификации регенерируется, когда запускается дефриб (идентификатор изменяется) и поддерживается сеанс. Была ли это проблема сервера - не могу сказать. Я сталкивался с этой проблемой раньше и никогда не доходил до ее сути, и это очень расстраивает - конечно, это не должно быть таким трудным. Я собираюсь оставить это на время, так как я должен продолжить некоторые другие аспекты приложения. Мне просто нужно обойти эту проблему, которая может никогда не появиться на сайте клиента.

Еще раз спасибо за вводные данные - если я добьюсь прогресса, я опубликую его здесь.

Ответы [ 4 ]

6 голосов
/ 21 ноября 2008

Это также может произойти, когда iis перезагружает или завершает пул приложений.

Возможно, вы захотите проверить Устранение неполадок при проверке подлинности с помощью форм Возможно, клиент потерял свой файл cookie.

Если вы генерируете билет аутентификации вручную, вам нужно установить тайм-аут в коде, а не в web.config

1 голос
/ 21 ноября 2008

Проверили ли вы проблему с пулом приложений или рабочим процессом, вызвавшим проблему?

1 голос
/ 21 ноября 2008

Не хочу утверждать очевидное, но:

  1. Установлены ли для тайм-аутов сеансов и FormsAuthentication одинаковые значения?
  2. Установлено ли slidingExpiration на true?
0 голосов
/ 21 ноября 2008

Спасибо за ответ, ребята: Я уже явно установил для параметра slideExpiration значение true в файле web.config без эффекта.

Значения времени ожидания: Сессия: 20 минут Проверка подлинности с помощью форм: 60 минут

Я оставил тайм-аут сеанса как есть и сократил проверку подлинности Forms до 12 минут для тестирования. Дефриб «пингует» каждые 10 минут. Если я оставляю страницу неактивной в течение 14 минут, а затем нажимаю кнопку, у меня возникает проблема #edit: но не каждый раз, когда кажется! #.

...