Логирование работы пользователя
Всем привет.
Поставили задачу сделать логирование работы пользователя. Вход и выход с сайта это понятно. Но как учитывать простои (например 15 минут бездействия) и сделать автоматический выход с сайта по таймауту, например 30 минут бездействия. Что-то типа Пользователь 1 Заход на сайт дата/время Пользователь 1 Бездействие с дата/время по дата/время всего минут Пользователь 1 Выход по бездействию с дата/время по дата/время всего минут Толкните в нужном направлении, что использовать. Спасибо |
Цитата:
Определяем пару переменных и функций глобально. let desc1, desc2 function ping() { if (desc1) clearTimeout(desc1) desc1 = setTimeout(_ => { console.log('Простой...') ping() }, 15 * 60 * 1000) } function out() { if (desc2) clearTimeout(desc2) desc2 = setTimeout(_ => { console.log('Разлогинить...') out() }, 30 * 60 * 1000) } ping() out() Если есть какое-то "значимое" действие - в обработчиках запускаем обе эти функции... |
Цитата:
И что будет, если простой 20 минут? |
Цитата:
Если и на такое хочешь реагировать - записывай информацию в тот же localStorage... При загрузке страницы ее читай... Корректируй таймауты... Далее по той же схеме. :) Цитата:
На 15-ти минутах залогируется "простой" и потом такое же действие будет выполнено еще через 15 минут. |
savsoft, можно пойти другим путем...
Например фиксировать факт активности. На основе этих данных составлять отчет, в котором можно показать: - минимальный период простоя - максимальный - среднеарифметический - общее время простоя (за день, неделю, месяц) |
Активностью пользователя можно считать события mousemove, keypress, scroll.
Поставить обработчик этих событий на document/window. В обработчике вычисляем интервал от времени предыдущего события до текущего, ставим setTimeout на 30 мин для выхода. (сняв предыдущий). Если вычисленный интервал был больше 15 мин, то сообщаем о простое. Если срабатывает таймер, то разлогиниваемся. |
Цитата:
Думаю все рабочие действия (поиск по базе, формирование документов/отчетов, смена статусов и т.д.), а не движения мышкой или обновление страницы, записывать через ajax в базу данных на хостинге, действие и дата/время. Через каждые 30 секунд выполнять функцию, которая через ajax делает запрос в базу данных и смотрит разницу с последним рабочим действием, и при необходимости (простой больше 15 минут) фиксирует в базе простой, который длится до следующего рабочего действия. Если простой больше 30 минут, то разлогиниться. При закрытии вкладки или браузера тоже фиксация и разлогиниться. Тут еще не разобрался как обработать обновление страницы и открытие вкладок/ссылок. Нужно реагировать только на закрытие вкладки/браузера. Нет ли в такой схеме подводных камней. Спасибо. |
Часовой пояс GMT +3, время: 04:37. |