Javascript отключен после периода неактивности пользователя

Я создал внутреннее приложение для пользователей нашей компании. После бездействия пользователя тайм-аута нет, и мы его не хотим. Пользователи жалуются на то, что после определенного времени бездействия (например, 30 минут) веб-приложение начинает вести себя странно, если начинает использовать его снова. Кнопки не работают, поля со списком не выпадают, датчики сбиты. Мне кажется очень ясным, что Javascript отключается после периода неактивности пользователя.

Кто-нибудь сталкивался с таким поведением, и если да, то как мне его предотвратить?

Веб-приложение представляет собой приложение ASP.NET MVC 3.0, использующее расширения Telerik MVC, которое включает в себя написание некоторого Ajax на стороне клиента. Он работает на IIS 6.0 в Windows Server 2003 Standard Edition.

6 ответов

Решение

Подождите минуту. Я только что заставил этих пользователей проверить это с моим сервером разработки. У них вообще нет этой проблемы. Я узнал, какая разница была на моем сервере разработки. Мы играли с требованием клиентских сертификатов. Мы устанавливаем параметр Сертификаты клиента в IIS на "Принять сертификаты клиента". Это вызвало много странного поведения на стороне клиента и зависело от сочетаний браузера и ОС. Установка этого значения обратно на "Игнорировать клиентские сертификаты", похоже, полностью устранила эту проблему.

Проверьте, не устанавливает ли скрипт какие-либо куки со значением TTL ~ 30 минут.

Я думаю, что это связано с тайм-аутом сессии. Поскольку пользователь потерял собственное значение сеанса, интеграция ajax с сервером не будет принята сервером, который, в свою очередь, считает, что сайт перестал работать. Исходя из описания, если сайт перестает работать через 30 минут, и пользователь полностью перезагружает страницу с помощью кнопки обновления, ему придется повторно войти в систему, поскольку значение сеанса теряется.

Есть несколько решений для этого.

Вам придется создать скрытый iframe, который он перезагружает каждые 10 минут.

Или же

Увеличивает время ожидания сеанса более 30 минут (1800 секунд)

Или же

Периодически отправляйте ajax-запрос на сервер, чтобы сохранить соединение.

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

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

Добавьте эту функцию в текст вашего документа куда-нибудь:

window.onload = function() {
    setInterval(messageLogger, 15000);
};
function messageLogger() {
    var now = new Date();
    console.log(now.getMinutes()); //Or now.getTime() or whatever makes the most sense to you
}

Откройте консоль и следите за этим, оставив страницу на некоторое время неактивной. Если он продолжает срабатывать каждые 15 секунд в течение неопределенного времени, javascript не отключается, и, скорее всего, это не будет проблемой с вашим кодом javascript. В этот момент я бы начал изучать, может ли это быть проблемой сеанса. Если вы заметили, что сообщения журнала начинают отставать (или прекращаются), у вас где-то есть утечка памяти в вашем javascript.

Это может быть неосновно, но иногда возникает утечка памяти, которая может вызвать такое поведение. Я столкнулся с этой проблемой с Gmail. Скрипты, работающие в фоновом режиме, могут это сделать. Можете ли вы определить, сколько памяти использует браузер, когда это происходит?

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