У меня есть приложение для веб-приложений, и, хотя в игре я хочу, чтобы это было, если пользователь закрывает страницу или свой браузер, она автоматически выйдет из системы. Я попытался использовать событие onbeforeunload, прикрепленное к окну:
window.onbeforeunload = function() { // perform logout functions here }
Проблема в том, что он также срабатывает, если пользователь обновит страницу. Есть ли способ определить, полностью ли пользователь закрывает всю страницу или просто обновляет ее?
Не существует заметной разницы. Чтобы автоматически выйти из системы, вы должны установить срок действия вашего файла cookie, хранящего информацию о логине или сеансе. Поэтому, если вы установите его на 1 час, пользователь будет по существу выходить из системы после того времени, так как файл cookie будет уничтожен. Если вы хотите отложить этот автоматический выход из системы, пока они все еще взаимодействуют с сайтом, вы можете сбросить время истечения срока действия файла cookie каждый раз, когда выполняете какое-либо действие (щелчок по ссылке, активация вызова AJAX и т. Д.). Это означало бы, что они выйдут из системы через 1 час бездействия, а не через час после входа в систему, что больше похоже на то, что вы хотите.
Если вы установили истечение срока действия файла cookie равным 0, оно истечет после окончания сеанса. Обычно это происходит, когда пользователь полностью покидает браузер. Это еще один вариант.
Как сказано, вы не можете. Хуже того, это событие было брошено множеством браузеров, вероятно, потому, что оно злоупотреблялось вредоносными сценариями, делающими pop-under и такими.
Возможным обходным путем является сценарий Ajax «звонок домой»: если он некоторое время молчал, пользователь просто покинул сайт (закрытая страница или браузер).
Если событие onunload отправляет запрос на сервер, который приведет к истечению сеанса через n секунд (где n – максимальное время для запроса перезагрузки страницы, возможно, 10). Затем запустите скрипт для проверки сайта, чтобы узнать, запланировано ли это событие и если да, отмените его. Это даст вам поведение, которое вам кажется нужным.
Но да, я бы порекомендовал просто завершить сессию.
Если я не ошибаюсь, Javascript должен иметь функцию, названную как onWindowClose, возможно, попробуйте ее найти?
Что касается PHP-решений, я не уверен, есть ли они, но я предлагаю вам быстро взглянуть на PHP Connection Handling , в частности функции connection_aborted () и register_shutdown_function ().