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

StackOverflow https://stackoverflow.com/questions/105147

  •  01-07-2019
  •  | 
  •  

Вопрос

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

Я полагаю, что сделал бы это с помощью JavaScript, подключив прослушиватели к щелчкам, перемещениям мыши и нажатиям клавиш, но я беспокоюсь о том, что буду возиться с другими скриптами.

Есть какие-нибудь предложения?­­­­­­­­­­­­­­­­­­­­­­­­­­

Это было полезно?

Решение

Во-первых, чтобы это было эффективно, вы должны убедиться, что пользователи вышли из системы на сервере по истечении этого времени простоя.В противном случае ничего из того, что вы делаете на стороне клиента, не будет эффективным.Если вы отправите их на страницу входа в систему, они могут просто нажать кнопку "Назад".

Во-вторых, обычный способ сделать это - использовать тег "meta refresh".Добавление этого на страницу:

<meta http-equiv="refresh" content="900;url=http://example.com/login"/>

отправит их на страницу входа в систему через 15 минут (900 секунд).Это отправит их туда, даже если они что-то делают на странице.Он не обнаруживает активность.Он просто знает, как долго страница была открыта в браузере.Обычно это достаточно хорошо, потому что люди не принимают 15 минут, чтобы заполнить страницы (stackoverflow.com является исключением, наверное.)

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

<input type="text" onClick="doSomething;">

Получите прямой доступ к объектной модели с помощью

Mozilla way:   element.addEventListener('click' ...)
Microsoft way: element.attachEvent('onclick' ...) 

и затем убедитесь, что вы передаете события после их получения, чтобы существующий код по-прежнему выполнял все, что (проверка?) он должен делать.

http://www.quirksmode.org/js/introevents.html имеет приличную статью о том, как это сделать.

--
bmb

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

Вы могли бы просто заставить его выйти из системы, если пользователь так долго не меняет страницы.Похоже, именно это и делает система учебных курсов Angel Learning.

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

Если вы можете разместить код на странице, то есть две вещи:

  • Javascript отслеживает движение мыши, активность клавиатуры и прокрутку.
  • Поместите тег meta refresh в html-код - если пользователь находится на этой странице более X минут, он автоматически перенаправится на страницу входа в систему.

Если вы можете разместить код только на сервере:

  • Сохраните сеанс (файл cookie или другой), который отслеживает время между изменениями страницы.Если страница запрашивается дольше, чем через X минут с момента последнего запроса, не обслуживайте запрошенную страницу, а обслуживайте страницу входа в систему.

Вы можете использовать методы обновления метаданных и сервера вместе.На обновленной странице появится надпись "срок действия вашего сеанса истекает, нажмите здесь, чтобы вернуться и продолжить работу в течение 30 секунд".

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

-Адам

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

При 5-минутном тайм-ауте сеанса вы могли бы выводить предупреждения через 4 минуты:

setTimeout(timeoutWarning, 240000);

function timeoutWarning() {
  if(confirm('You have been idle for a while.  Would you like to remain logged in?'))
    window.location.refresh();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top