Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.06.2023, 14:16
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 155

Логирование работы пользователя
Всем привет.

Поставили задачу сделать логирование работы пользователя.

Вход и выход с сайта это понятно.
Но как учитывать простои (например 15 минут бездействия) и сделать автоматический выход с сайта по таймауту, например 30 минут бездействия.

Что-то типа
Пользователь 1 Заход на сайт дата/время
Пользователь 1 Бездействие с дата/время по дата/время всего минут
Пользователь 1 Выход по бездействию с дата/время по дата/время всего минут

Толкните в нужном направлении, что использовать.

Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 08.06.2023, 17:28
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от savsoft
Но как учитывать простои (например 15 минут бездействия) и сделать автоматический выход с сайта по таймауту, например 30 минут бездействия.
Например таким образом...
Определяем пару переменных и функций глобально.

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()

Если есть какое-то "значимое" действие - в обработчиках запускаем обе эти функции...
Ответить с цитированием
  #3 (permalink)  
Старый 08.06.2023, 20:16
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 155

Сообщение от ksa Посмотреть сообщение
Например таким образом...
Определяем пару переменных и функций глобально.

Если есть какое-то "значимое" действие - в обработчиках запускаем обе эти функции...
А разве обновление страницы не будет сбрасывать переменные?
И что будет, если простой 20 минут?

Последний раз редактировалось savsoft, 08.06.2023 в 20:25.
Ответить с цитированием
  #4 (permalink)  
Старый 09.06.2023, 09:41
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

Сообщение от savsoft
А разве обновление страницы не будет сбрасывать переменные?
Тут встречный вопрос - обновление страницы не считается "активностью на странице"?

Если и на такое хочешь реагировать - записывай информацию в тот же localStorage... При загрузке страницы ее читай... Корректируй таймауты...
Далее по той же схеме.

Сообщение от savsoft
И что будет, если простой 20 минут?
Ничего не будет.
На 15-ти минутах залогируется "простой" и потом такое же действие будет выполнено еще через 15 минут.
Ответить с цитированием
  #5 (permalink)  
Старый 09.06.2023, 09:49
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,123

savsoft, можно пойти другим путем...

Например фиксировать факт активности.
На основе этих данных составлять отчет, в котором можно показать:
- минимальный период простоя
- максимальный
- среднеарифметический
- общее время простоя (за день, неделю, месяц)
Ответить с цитированием
  #6 (permalink)  
Старый 09.06.2023, 10:10
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,704

Активностью пользователя можно считать события mousemove, keypress, scroll.
Поставить обработчик этих событий на document/window.
В обработчике вычисляем интервал от времени предыдущего события до текущего, ставим setTimeout на 30 мин для выхода. (сняв предыдущий).
Если вычисленный интервал был больше 15 мин, то сообщаем о простое.
Если срабатывает таймер, то разлогиниваемся.
Ответить с цитированием
  #7 (permalink)  
Старый 09.06.2023, 11:20
Профессор
Отправить личное сообщение для savsoft Посмотреть профиль Найти все сообщения от savsoft
 
Регистрация: 03.01.2019
Сообщений: 155

Сообщение от ksa Посмотреть сообщение
Ничего не будет.
На 15-ти минутах залогируется "простой" и потом такое же действие будет выполнено еще через 15 минут.
Нужно показывать реальный простой, пусть с точностью 30 секунд.

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

Через каждые 30 секунд выполнять функцию, которая через ajax делает запрос в базу данных и смотрит разницу с последним рабочим действием, и при необходимости (простой больше 15 минут) фиксирует в базе простой, который длится до следующего рабочего действия. Если простой больше 30 минут, то разлогиниться.

При закрытии вкладки или браузера тоже фиксация и разлогиниться. Тут еще не разобрался как обработать обновление страницы и открытие вкладок/ссылок. Нужно реагировать только на закрытие вкладки/браузера.

Нет ли в такой схеме подводных камней.

Спасибо.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Leaflet путь от маркера пользователя. jazz13666 Общие вопросы Javascript 0 09.04.2021 14:57
React и контент в зависимости от типа пользователя hound Библиотеки/Тулкиты/Фреймворки 8 19.11.2016 21:03
Старший веб-разработчик с опытом работы с React.js SvetlanaRyabunina Работа 0 06.05.2016 10:37
Нужен скрипт для работы через Google Script (Spreadsheets) Satmax Работа 0 13.08.2014 16:55
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31