Реализовать учет времени пользователя в системе (логи входа и выхода)
Аутентификация — токен. Храним в localStorage.
По требованиям бизнес-логики:
1) юзер может логиниться только с одного устройства (и браузера)
2) для ведения логов рабочего времени юзера в приложении есть две таблицы — sessions (после логина пишем время начала сессии и токен) и log_sessions (после выхода из приложения запись в sessions удаляем, и пишем сюда время начала и окончания рабочего времени юзера)
3) задается максимально разрешенное время бездействия юзера. Например, если в течение часа юзером определенных действий не производилось на сервере, то сессию необходимо прервать. На клиенте тоже. И при каждом определенном действии юзера, мы продлеваем время его сессии и опять начинаем считать время бездействия, пока оно не превысит максимальное значение.
Задача - надо реализовать правильный выход юзера из приложения (грамотную систему, дающую 100% инфо о точном статусе юзера онлайн или офлайн и точное время проведенное юзером в системе) при определенных нюансах:
1) при закрытии браузера. Закрыли браузер — на стороне сервера почистили sessions и сделали запись в log_sessions.
Тут есть тонкость. Если мы закрываем браузер, в котором куки, localStorage и т.п. зачищается, то при следующем открытия браузера, клиент остается без токена, а на сервере сессия висит в sessions. И при логине, сервер не дает зайти, считая юзера находящимся в системе.
А если закрываем браузер ,в котором куки и остальные данные не удаляются, то при следующем открытии, приложение открывается уже залогиненным и проблемы нет.
2) при окончании разрешенного времени бездействия.
3) по возможности учитывать кратковременные разрывы связи. Чтобы таковые не сбрасывали сессию!