Где установить тайм-аут сеанса?

Приложение устанавливает session.timeout в обработчике событий Application_AcquireRequestState.

Перед истечением сеанса появляется всплывающее окно с уведомлением. Он сбрасывает тайм-аут сеанса, скажем, до 3 минут (обычно это 30 минут) с помощью Application_AcquireRequestState.

Уведомление предлагает пользователю возможность продлить сеанс еще на 30 минут. Если пользователь нажимает «Да», он сбрасывает тайм-аут сеанса на 30 минут с помощью предыдущего обработчика событий.

Проблема в том, что хотя пользователь нажимает «Да» и время ожидания сеанса установлено правильно, время ожидания сеанса превышает установленное время. Это происходит только после уведомления.

Подозрение в том, что когда он попадает в Application_AcquireRequestState, тайм-аут уже рассчитан для этого запроса. Новое значение тайм-аута будет использовано для следующего запроса. Таким образом, когда пользователь нажимает «Да», чтобы продлить сеанс, тайм-аут для текущего запроса составляет не 30 минут, а всего 3 минуты из-за тайм-аута, установленного окном уведомления. Да будет действовать только в том случае, если пользователь отправит другой запрос.

(Окно уведомлений имеет собственный объект времени)

Кто-нибудь может это проверить? или укажите мне хороший ресурс, чтобы объяснить, как asp.net справляется с этим?

Спасибо!

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
3 004
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я использую гораздо более простой механизм. У меня вообще нет всплывающего окна для продления сеанса. Я использую сеанс со скользящим окном, и когда пользователь нажимает кнопку «ОК» в уведомлении об истечении срока действия сеанса, он отправляет запрос AJAX обратно серверу, обновляя скользящее окно.

Session.Timeout - это глобальный параметр в приложении.

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

Ответ принят как подходящий

Жап, проблема в том, что пользователь нажимал «Да», чтобы продлить сеанс, а затем уходил.

Думаю, я наконец решил проблему.

Как я и подозревал, но только в режиме "SQLServer". Когда запрос поступает в Application_AcquireRequestState, сеанс уже расширен (можно проверить в базе данных ASPState, таблице ASPStateTempSessions). Если пользователь нажал «Да», несмотря на то, что установлено новое значение тайм-аута, оно не вступит в силу до следующего запроса сервера. Если пользователь ушел, не щелкнув еще раз, время сеанса истекло с ранее установленным значением тайм-аута, которое составляет 3 минуты.

В режиме «InProc» или «StateServer» объекты сеанса управляются кешем, срок действия которого может быть сброшен только в будущем, но не сокращен до более текущего времени (или он будет проигнорирован).

Другие вопросы по теме