Как работает тайм-аут сеанса в IIS 7? - PullRequest
25 голосов
/ 22 февраля 2012

В web.config я установил тайм-аут в sessionState на 20 минут. Согласно MSDN, этот тайм-аут указывает количество минут, в течение которых сеанс может простаивать, прежде чем его прервать. В IIS 7 DefaultWebSite-> Состояние сеанса-> Настройки cookie-> Время ожидания автоматически заполняется значением тайм-аута, установленным в web.config, которое в моем случае составляет 20 минут. Кроме того, Пулы приложений-> DefaultAppPool-> Расширенные настройки-> idleTimeout, я установил его на 10 минут.

Затем я сделал два теста: Первый тест: я вошел в свое веб-приложение в 15:45, простаивая в течение 10 минут. В 15:55 я попытался использовать свое приложение, меня выгнали. Я думаю, что idleTimeout вступает в игру.

Второй тест: я вошел в свое веб-приложение в 16:00, играю с приложением в 16:05, 16:10, 16:15 и 16:20. Я ожидал, что меня выгонят в 16:20. Но я не был. Я думал, что тайм-аут состояния сеанса (20 минут) в IIS 7 - это максимальное время, в течение которого сеанс пользователя может быть активным, прежде чем веб-агент вызовет повторную аутентификацию пользователя. Как видно из этого теста, это не так. Кто-нибудь может мне это объяснить? Кроме того, как я могу установить тайм-аут для вышеуказанного случая?

1 Ответ

37 голосов
/ 22 февраля 2012

Тайм-аут сеанса - это скользящий тайм-аут, который сбрасывается для пользователя до настроенного значения при каждом посещении сервера.

Тайм-аут простоя приложения включается, если не было никаких запросовк вашему приложению за этот период времени.

Поэтому обычно используются следующие сценарии:

Time  | User A       | User B       | Session States
------+--------------+--------------+-------------------------------------------
12:00 | Visits Page1 |              | A: New Session, Time-out: 20 minutes
12:02 | Visits Page2 |              | A: Time-out reset: 20 minutes
12:10 |              | Visits Page1 | A: Time-out: 12 min; B: New: 20 minutes
12:15 |              | Visits Page2 | A: Time-out: 07 min; B: Time-out: 20 min
12:22 |              |              | A: times out; B: 13 min remaining
12:32 |              |              | Application Shuts Down (Idle time reached)
12:35 | Visits Page3 |              | A: New Session Starts

Если пользователь А вернется на сайт после 12:22, у него будет совершенно новый сеанси любые значения, которые вы сохранили там ранее, будут потеряны.

Единственный способ обеспечить сохранение сеанса при перезапуске приложения - это настроить либо службу SessionState, либо состояния сеанса SQL, и убедиться, что вы 've настроил machine.key , чтобы он не генерировался автоматически при каждом перезапуске сервера.

Если вы используете стандартные механизмы ASP.NET для аутентификации, ASP.NET выдастдва файла cookie для каждого пользователя:

  1. Токен аутентификации: управляется параметром Время ожидания аутентификации , позволяетПользователь может автоматически войти на ваш сайт, если срок действия файла cookie не истек, это может быть фиксированное или скользящее значение по умолчанию, равное 30 минутам, что означает, что его маркер аутентификации может работать с более длительным периодом "простоя", чем его сеанс.
  2. Токен сеанса: управляется параметром тайм-аута сеанса, позволяет вашему приложению сохранять и получать доступ к значениям для каждого пользователя в течение срока его посещения.

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


Ответ на комментарии:

  1. Тайм-аут 20-минутного сеанса относится к элементам, которые вы поместили в объект сеанса пользователя ( HttpSessionState ) с использованием метода Session.Add(string, object).
  2. Это зависит от ситуации.Если вы правильно настроили machine.key , токены аутентификации все равно будут действительны, и если ваши сеансы больше не будут "InProc", они также будут сохраняться при перезапуске приложения и будут продолжатьбыть читабельным - см. примечания выше.
...