Логирование работы пользователя
Всем привет.
Поставили задачу сделать логирование работы пользователя. Вход и выход с сайта это понятно. Но как учитывать простои (например 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, время: 09:08. |