Час очікування сесії в 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
Будь ласка, позначте якісні відповіді як прийняті, використовуючи галочку біля стрілок upvote / downvote
Brian Webster

3
Через вісім років правильної відповіді досі не прийнято.
Натан

Поясніть, що ви маєте на увазі під менеджером IIS / Властивості веб-сайту / налаштуваннями конфігурації ASP.NET. Крок за кроком, що ви змінили в IIS?
niico

Відповіді:


275

Чи використовуєте ви автентифікацію форм?

Аутентифікація форм використовує власне значення для таймауту (30 хв. За замовчуванням). Час очікування аутентифікації форм відправить користувача на сторінку входу, коли сеанс все ще активний. Це може виглядати як поведінка, яку надає ваша програма під час витримки сеансу, що дозволяє легко сплутати одне з іншим.

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

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

Встановлення тайм-ауту форми на щось менше, ніж час очікування сеансу, може дати користувачеві вікно, в якому можна входити назад, не втрачаючи жодних даних про сеанс.


@ Незламний за лічені хвилини.
Word Rearranger

44

Я не знаю про web.config або IIS. Але я вважаю, що з коду C # ви можете це зробити так, як

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

22
Чи коригуватиме це лише час очікування поточного сеансу? Або це регулює час очікування для всієї програми?
Джонкл

2
Ніщо в документації не вказує, що налаштування Session.Timeoutвідрізняється від використання web.config або IIS, тому я припускаю, що це стосується всієї програми.
Дразивний

Я думаю, що @Drasive має право, але це повинно бути доведено принаймні двома відокремленими підключеними клієнтами до сервера та перевірити час очікування сеансу в режимі очікування.
QMaster

42

Використовуйте наступний блок коду у вашому файлі web.config. Тут затримка сеансу за замовчуванням становить 80 хвилин.

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

Використовуйте наступне посилання для сеансу тайм-аут із спливаючим повідомленням.

Приклад часу сеансу

FYI: Вищеописані приклади зроблено з управлінням поп-файлів devexpress, тому вам потрібно налаштувати / замінити devexpress popup control на звичайний контроль pop-popup. Якщо ви використовуєте devexpress, не потрібно налаштовувати


фальшивий файл?
Кікенет

3
@Kiquenet, якщо встановити cookie без значення true, ваш sessionId буде вбудований у URL, що є високим ризиком для безпеки. Рамка ASP.NET вставляє в URL унікальний ідентифікатор, ви можете перевірити це, відключивши файл cookie або встановивши атрибут без файлів cookie істинним, як і раніше. Відповідно до 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-го, але, чорт забираю, це просто вирішило моє питання спасибі!
Бінарний9

8

Це, як правило, все, що вам потрібно зробити ...

Ви впевнені, що через 20 хвилин причина втрати сеансу в тому, що не працює, хоча ...

Є багато причин того, чому сеанс може бути видалений. Ви можете ввімкнути журнал подій для IIS, а потім скористатися засобом перегляду подій, щоб побачити причини, чому сеанс був очищений ... Ви можете виявити, що це може бути з інших причин?

Ви також можете прочитати документацію для повідомлень про події та пов’язану з ними таблицю подій .


3

Якщо ви використовуєте автентифікацію, рекомендую додати наступне у файл web.config.

У моєму випадку користувачі переспрямовуються на сторінку входу після закінчення часу:

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

У мене тут помилка <режим автентифікації = "Форми"> після того, як я розміщую її в web.config
Lst Patrick,


2

Оскільки ядро ​​ASP.Net 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?
Кікенет

1

Значення тайм-ауту сеансів IIS призначене лише для класичних програм .asp, це регулюється в конфігурації IIS. У вашому випадку для програм ASP.NET застосовується лише значення часу очікування, визначене web.config.


Що про час очікування пулу програми IIS?
SteveCav

1

Час очікування сеансу за замовчуванням визначається в IIS до 20 хвилин

Дотримуйтесь наведених нижче процедур для кожного веб-сайту, розміщеного на веб-сайті IIS 8.5

Конфігурація тайм-ауту IIS

Відкрийте менеджер IIS 8.5.

Клацніть назву сайту.

Виберіть "Редактор конфігурації" у розділі "Управління".

У спадному списку "Розділ:" у верхній частині редактора конфігурації знайдіть "system.web / sessionState".

Встановіть "timeout" на "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 і натисніть клавішу Enter.


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