Asp.net формирует cookie аутентификации, не соблюдающие тайм-аут с IIS7 - PullRequest
23 голосов
/ 19 ноября 2009

Кажется, что тайм-аут аутентификационных файлов cookie истекает через короткий промежуток времени (около суток) Я использую Аутентификацию по формам и у меня в web.config время ожидания = "10080" со значением slideExpiration = "false". С этим параметром срок действия файла cookie истекает примерно через 7 дней после успешной аутентификации пользователя.

Это работало так, как рекламировалось в IIS6, но когда я переместил сайт на IIS7, срок действия файла cookie истекает гораздо быстрее. Я подтвердил такое поведение на нескольких машинах с помощью IE и Firefox, и я понял, что это настройка IIS7.

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

Ответы [ 5 ]

40 голосов
/ 03 февраля 2010

Файл cookie аутентификации шифруется с использованием значения machineKey из локального web.config или глобального machine.config. Если такой ключ не установлен явно , ключ будет сгенерирован автоматически, но он не будет сохранен на диске - следовательно, он будет меняться всякий раз, когда приложение перезапускается или «перезаписывается» из-за неактивности, и новый ключ будет создан при следующем попадании.

Устранить проблему так же просто, как добавить секцию конфигурации <machineKey> к web.config или, возможно (предпочтительно?), К machine.config на сервере (не проверено):

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

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

0 голосов
/ 18 августа 2010

У меня недавно была та же проблема, когда мой сайт отключался каждые 20 минут, хотя я установил время ожидания сеанса 2 часа. Я обнаружил, что это потому, что рабочий процесс IIS истекает каждые 20 минут: http://technet.microsoft.com/en-us/library/cc783089(WS.10).aspx

0 голосов
/ 28 ноября 2009

Установить состояние сеанса, настроенное в IIS, как В процессе Используйте Cookies Тайм-аут = ваше необходимое время Использовать хостинг для олицетворения

Также установите для EnableSessionState значение true (которое также используется по умолчанию)

И самое главное запустить пул приложений в классическом режиме.

Надеюсь, ваша проблема решится.

0 голосов
/ 30 ноября 2009

Прежде всего, я должен сказать, что эти «рекомендации» носят общий характер и не являются исключительными для iis-7. В web.config под <system.web> у вас либо <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" timeout="130" cookieless="false"/> (для этого требуется служба сервера состояний сеанса ASP.NET, работающая на локальном хосте) или <sessionState mode="InProc" timeout="130" cookieless="false"/>. Основное отличие состоит в том, что в InProc данные о состоянии сеанса помещаются в сам процесс приложения. В другом случае хранилище выполняет другая служба, а ваше приложение просто опрашивает его, чтобы получить необходимые данные. Используя оба (а также режим состояния сеанса sql-сервера), InProc является наименее надежным, но самым быстрым. Sql-сервер является самым надежным и самым медленным, а режим StateServer находится где-то посередине и ненадежен только в случае сбоя питания / системы. Сказав это, я должен сказать, что для сайта с низким количеством запросов снижение производительности незначительно.

Теперь мой опыт показал, что InProc довольно непредсказуем по своей стабильности; Раньше у меня была такая же проблема с тобой. Мне удалось повысить стабильность приложения, изменив настройки пула приложений. Я полностью устранил проблему, переключившись на SessionState (что также позволяет завершать работу приложения и не терять данные о состоянии сеанса).

Причины, по которым вы можете пострадать от стабильности приложения / сеанса:

  1. IIS и пул приложений. Каждый виртуальный каталог веб-сайта назначается пулу приложений (по умолчанию «DefaultAppPool»), который имеет ряд настроек, среди которых вы определяете интервал, в течение которого процесс «перерабатывается», и, таким образом, сохраняет системные ресурсы. Если вы не измените настройки, приложение может активировать один из критериев для утилизатора процесса, что означает, что ваше приложение отключено

  2. Antivirus. В приложении ASP.NET при касании файла web.config (и любых дочерних файлов .config, от которых зависит приложение) происходит перезапуск приложения. Теперь есть случаи, когда антивирусная программа может касаться файла web.config (скажем, один раз в день?), И поэтому приложение перезапускается и данные сеанса теряются.

  3. Плохая конфигурация В частности, для проверки подлинности с помощью форм параметры и поведение, связанные со временем, всегда зависят от веб-сеанса, а сеанс аутентификации находится в рамках веб-сеанса.

Что я не знаю, так это то, что модуль проверки подлинности с помощью форм зависит только от домена сеанса или же он также помещает данные в область приложения. Если второе имеет место, то вам, возможно, придется отключить все параметры утилизации в пуле приложений, а также повторно проверить конфигурацию / антивирус и определить, кто хранит данные сеанса.

0 голосов
/ 23 ноября 2009

Насколько я понимаю, срок действия файлов cookie истекает потребителем - браузером, что означает, что IIS не имеет права голоса в этом

...