какие существуют события для фиксации выхода пользователя сайта?
Я бы хотел зафиксировать время выхода пользователя сайта, не могу найти точный и подробный ответ, перепробывал многие способы взятия событий выхода пользователя, у каждого из них были свои минусы т.е не фиксировали выход, в зависимости от устройства, ОС и события выхода такие как свернуть браузер, закрыть вкладку, назад на странице.
Есть ли какой нибудь более эффуктивный способ для фиксации выхода польователя с сайта? Особенно на Iphone
Ответы (1 шт):
Возможно подойдет вот такое решение. Создаем таблицу в которой регистрируем пользователя и выдаем ему уникальный код сессии. На примере pstgresql
CREATE TABLE hst_user_logins (
session VARCHAR(32), -- уникальный код сессии
login_datetime TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- время входа
logout_datetime TIMESTAMP(0) WITHOUT TIME ZONE DEFAULT CURRENT_TIMESTAMP, -- время последнего действия (по сути время выхода)
user_id BIGINT NOT NULL, -- указатель на таблицу пользователей
ipaddr VARCHAR(15) NOT NULL, -- IP-адрес входа
cookie VARCHAR(32) DEFAULT NULL::character varying, -- кука, на случай если время действия кода сессии истечет
CONSTRAINT hst_user_logins_pkey PRIMARY KEY(id),
CONSTRAINT hst_user_logins_session_key UNIQUE(session),
CONSTRAINT hst_user_logins_fk FOREIGN KEY (user_id)
REFERENCES spr_users(id)
ON DELETE NO ACTION
ON UPDATE NO ACTION
NOT DEFERRABLE
)
WITH (oids = false);
В момент авторизации пользователя, сохраняем в эту таблицу время входа, IP-адрес, время последнего действия (=времени входа)
При ЛЮБОМ действии пользователя на сайте - обновляем значение поля logout_datetime.
Таким образом, у нас всегда будет сохранено время его последнего действия. Если он что-то сделал, потом 5 минут тупил и просто закрыл браузер или вкладку - мы знаем что последний раз он что-то сделал тогда-то и так как дальше для нас от него было бездействие на сайте то мы считаем, что это и есть время выхода.