какие существуют события для фиксации выхода пользователя сайта?

Я бы хотел зафиксировать время выхода пользователя сайта, не могу найти точный и подробный ответ, перепробывал многие способы взятия событий выхода пользователя, у каждого из них были свои минусы т.е не фиксировали выход, в зависимости от устройства, ОС и события выхода такие как свернуть браузер, закрыть вкладку, назад на странице.

Есть ли какой нибудь более эффуктивный способ для фиксации выхода польователя с сайта? Особенно на Iphone


Ответы (1 шт):

Автор решения: phpBear

Возможно подойдет вот такое решение. Создаем таблицу в которой регистрируем пользователя и выдаем ему уникальный код сессии. На примере 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 минут тупил и просто закрыл браузер или вкладку - мы знаем что последний раз он что-то сделал тогда-то и так как дальше для нас от него было бездействие на сайте то мы считаем, что это и есть время выхода.

→ Ссылка