Как определить, что последняя вкладка браузера, содержащая мое приложение, закрывается? - PullRequest
2 голосов
/ 18 октября 2011

У меня есть приятная кнопка LogOut в меню моего PHP-приложения, но некоторые люди не используют ее, они просто выходят из браузера.

Есть ли способ обнаружить выход из браузера и/ или закрытие последней вкладки с открытым приложением?(Я понимаю, что он не будет обрабатывать сбой браузера, но это лучше, чем сейчас, и покрывает 99% случаев).

Я понимаю, что не могу использовать JavaScript, поскольку DOM не позволит моему JS знать о других вкладках и окнах браузера.

Я использовал решение на основе таймера, но один пользовательустановите время ожидания 999999 минут и количество одновременных пользователей равным 1, затем закройте браузер и заблокируйте себя.

Но как насчет другого способа?Думайте сбоку, ребята.Могу ли я отправить файл cookie, когда пользователь открывает новую вкладку со страницей из моего приложения?А потом удалить куки, когда пользователь захочет закрыть вкладку?И проверить, удаляю ли я последние файлы cookie, и сообщить серверу, чтобы они воспринимали это как выход из системы?

Если нет файлов cookie, есть ли другой способ?(Используйте Ajax при открытии и закрытии страницы, и сервер может решить, закрылась ли последняя вкладка?)

1 Ответ

2 голосов
/ 18 октября 2011

Как насчет перехвата события разгрузки веб-страницы, чтобы при выгрузке она использовала ajax для вызова скрипта на сервере.Затем этот сценарий будет хранить время, когда браузер вызывает его.

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

На стороне сервера запустите задание cron, которое запускается каждую минуту (5, если вас беспокоит наличие ресурсов), которое проверяет, имеет ли какой-либо сеансустановленное время выгрузки, и что время выгрузки превышает 25 секунд.Если это так, то это означает, что пользователь закрыл браузер, вкладку или удалился из приложения.Затем следует сохранить для выполнения очистки или выхода из этого браузера.

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

...