Как удалить сессию, когда пользователь покидает страницу? - PullRequest
0 голосов
/ 03 мая 2020

У меня небольшой чат-сайт с одной страницей. Я сохраняю все данные в сеансе, когда пользователь входит в систему. Сессия удаляется, когда пользователь выходит из системы через кнопку выхода из системы. Но если пользователь закрывает страницу и возвращается через 5 минут, он все еще входит в систему, поэтому сеанс все еще активен, и я не хочу этого.

Ответы [ 2 ]

0 голосов
/ 03 мая 2020

В современных браузерах есть запрос маяка, который отправляет запрос, когда вкладка / windows закрывается и гарантирует ее доставку (она не будет отменена).

С ее помощью вы можете отправить запрос на прекращение сеанса.

Более подробную информацию вы можете прочитать здесь: https://developer.mozilla.org/en-US/docs/Web/API/Beacon_API/Using_the_Beacon_API

window.onunload = function analytics(event) {
  if (!navigator.sendBeacon) return;

  var url = "https://example.com/analytics";
  // Create the data to send
  var data = "state=" + event.type + "&location=" + location.href;

  // Send the beacon
  var status = navigator.sendBeacon(url, data);

  // Log the data and result
  console.log("sendBeacon: URL = ", url, "; data = ", data, "; status = ", status);
};

Обычная реализация - отправка запроса пинга каждые N секунд и сохраните метку времени последнего запроса в сеансе. Когда сессия начинает проверять свою временную метку с текущей и сбрасывает переменные текущей сессии, если она отличается более чем на 2-3 таймфрейма.

0 голосов
/ 03 мая 2020

Вот несколько ответов для вашей проблемы:

Unset Session Когда вкладка браузера закрыта

PHP - Уничтожение сессии после закрытия браузера

Но вы можете отправлять частые ajax запросы на сервер для сохранения сеанса, и если в течение 10 секунд не было запроса ajax, вы отменяете сеанс

setInterval(() => {
    // ajax requset
}, 1000)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...