Тайм-аут сеанса в ASP.NET


163

Я использую приложение ASP.NET 2.0 в IIS 6.0. Я хочу, чтобы время ожидания сеанса составляло 60 минут, а не 20 минут по умолчанию. Я сделал следующее

  1. Установить <sessionState timeout="60"></sessionState> в web.config.
  2. Установите время ожидания сеанса до 60 минут в диспетчере IIS / свойства веб-сайта / параметры конфигурации ASP.NET.
  3. Установите время простоя на 60 минут в свойствах / производительности пула приложений.

Я все еще получаю тайм-аут сессии в 20 минут. Есть ли что-нибудь еще, что мне нужно сделать?


1
Пожалуйста, предоставьте информацию о том, как вы измерили 20 минут. Давайте будем уверены, что 20 минут - это тайм-аут сеанса, а не какой-то другой.
Джон Сондерс

11
Пожалуйста, отметьте качественные ответы как принятые, используя галочку рядом со стрелками вверх / вниз
Брайан Вебстер

3
Восемь лет спустя правильный ответ до сих пор не принят.
Натан

Уточните, что вы подразумеваете под диспетчером IIS / Свойства веб-сайта / Параметры конфигурации ASP.NET. Шаг за шагом, что вы изменили в IIS?
niico

Ответы:


275

Вы используете проверку подлинности с помощью форм?

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

<system.web>
    <authentication mode="Forms">
          <forms timeout="50"/>
    </authentication>

    <sessionState timeout="60"  />
</system.web>

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


@ Неуязвимый в течение нескольких минут.
Слово переставляет

44

Я не знаю о web.config или IIS. Но я считаю, что из кода C # вы можете сделать это как

Session.Timeout = 60; // 60 is number of minutes

22
Будет ли это только корректировать время ожидания текущего сеанса? Или это отрегулирует время ожидания для всего приложения?
Johncl

2
Ничто в документации не указывает на то, что настройки Session.Timeoutотличаются от использования web.config или IIS, поэтому я предполагаю, что это для всего приложения.
Драматический

Я думаю, что @Drasive имеет право, но это должно быть подтверждено, по крайней мере, двумя отдельными подключенными клиентами к серверу и проверить тайм-аут простоя.
QMaster

42

Используйте следующий блок кода в вашем файле web.config. Здесь время сеанса по умолчанию составляет 80 минут.

<system.web>
 <sessionState mode="InProc" cookieless="false" timeout="80" />
</system.web>

Используйте следующую ссылку для Session Timeout с всплывающим предупреждающим сообщением.

Пример тайм-аута сеанса

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


ложь без печенья?
Kiquenet

3
@Kiquenet, если вы установите cookieless в true, то ваш sessionId будет встроен в URL, что представляет собой серьезную угрозу безопасности. ASP.NET Framework вставляет уникальный URL-адрес в URL-адрес, вы можете проверить это, отключив cookie-файл или установив для атрибута cookie-файла значение true, как вы это сделали. Согласно MSDN, по умолчанию значение SessionID хранится в файле cookie сеанса с неограниченным сроком действия в браузере, но если вы укажете cookieless = "true", ASP.NET поддерживает состояние сеанса без cookie, автоматически вставляя уникальный идентификатор сеанса в URL страницы. ,
Хамза

8

Есть ли у вас что-нибудь в machine.config, которое может вступить в силу? Задание времени ожидания сеанса в web.config должно переопределить любые настройки в IIS или machine.config, однако, если у вас есть файл web.config где-то в подпапке вашего приложения, этот параметр переопределит тот, который находится в корне вашего приложения.

Кроме того, если я правильно помню, тайм-аут в IIS влияет только на страницы .asp, а не .aspx. Вы уверены, что ваш код сеанса в web.config правильный? Это должно выглядеть примерно так:

<sessionState
    mode="InProc"
    stateConnectionString="tcpip=127.0.0.1:42424"
    stateNetworkTimeout="60"
    sqlConnectionString="data source=127.0.0.1;Integrated Security=SSPI"
    cookieless="false"
    timeout="60"
/>

8

В моей ситуации это был Application Pool. Он настроен на перезапуск при простое в течение хх минут. Когда я установил его не перезагружать, он использует значение из Web Config.


Я знаю, что мы 2020, но, черт побери, это только что решило мою проблему, спасибо!
Binary9

8

Это обычно все, что вам нужно сделать ...

Вы уверены, что по истечении 20 минут сеанс теряется из-за простоя, хотя ...

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

Вы также можете прочитать документацию к сообщениям о событиях и соответствующую таблицу событий .


3

Если вы используете аутентификацию, я рекомендую добавить следующее в файл web.config.

В моем случае пользователи перенаправляются на страницу входа по истечении времени ожидания:

<authentication mode="Forms">
    <forms defaultUrl="Login.aspx" timeout="120"/>
</authentication>

Я получил ошибку здесь <authentication mode = "Forms"> после того, как я разместил ее в web.config
Lst Patrick


2

Начиная с ASP.Net core 1.0 (vNext или любое другое имя, используемое для него), сеансы реализованы по-разному. Я изменил значение тайм-аута сессии Startup.cs, void ConfigureServicesиспользуя:

services.AddSession(options => options.IdleTimeout = TimeSpan.FromSeconds(42));

Или, если вы хотите использовать appsettings.jsonфайл, вы можете сделать что-то вроде:

// Appsettings.json
"SessionOptions": {
    "IdleTimeout": "00:30:00"
}

// Startup.cs
services.AddSession(options => options.IdleTimeout = TimeSpan.Parse(Config.GetSection("SessionOptions")["IdleTimeout"]));

2

Вы можете найти настройки здесь в IIS:

настройки

Его можно найти на уровне сервера, веб-сайта или приложения в разделе «ASP».

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

<configuration>
   <system.web>

      <!-- Session Timeout in Minutes (Also in Global.asax) -->
       <sessionState timeout="1440"/>

   </system.web>
</configuration>

Также в Global.asax?
Kiquenet

1

Значение времени ожидания сеансов IIS предназначено только для классических приложений .asp, оно контролируется в конфигурации IIS. В вашем случае Для приложений ASP.NET применяется только значение времени ожидания, указанное в web.config.


Как насчет тайм-аута пула приложений IIS?
SteveCav

1

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

Следуйте приведенным ниже процедурам для каждого сайта, размещенного на веб-сайте IIS 8.5.

Настройка времени ожидания IIS

Откройте диспетчер IIS 8.5.

Нажмите на название сайта.

Выберите «Редактор конфигурации» в разделе «Управление».

В раскрывающемся списке «Раздел:» в верхней части редактора конфигурации найдите «system.web / sessionState».

Установите «тайм-аут» на «00:20:00 или меньше», используя наименьшее возможное значение в зависимости от приложения. Допустимые значения: 5 минут для приложений с высокими значениями, 10 минут для приложений со средними значениями и 20 минут для низких -значения приложений.

На панели «Действия» нажмите «Применить».


0

если вы хотите тайм-аут сеанса для сайта, чем удалить

<authentication mode="Forms">
      <forms timeout="50"/>
</authentication>

тег из файла web.config.


-1

Свойство Timeout указывает период ожидания, назначенный объекту Session для приложения, в минутах. Если пользователь не обновляет или не запрашивает страницу в течение периода ожидания, сеанс заканчивается.

IIS 6.0: минимально допустимое значение составляет 1 минуту, а максимальное - 1440 минут.

Session.Timeout = 600;

-2

После изменения значения времени ожидания сеанса в IIS, пожалуйста, перезапустите IIS. Для этого перейдите в командную строку. Введите IISRESET и нажмите ввод.


Редактирование файла web.config автоматически приводит к сбросу IIS.
Тимоти Гонсалес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.