Я рассмотрел несколько тем (здесь и google) относительно обнаружения выхода браузера в php, и я не знаю, как это сделать.
Я пробовал register_shutdown_function
в PHP, но это выполнялось, даже когда я обновил страницу браузера.
Может ли кто-нибудь помочь?
заранее спасибо
PHP – это серверный язык. События браузера обрабатываются событиями DOM. В событиях «onunload» или «onbeforeunload», отправляя вызов AJAX в файл PHP.
И в этом другом вопросе есть ароматное объяснение того, что я говорю.
Пожалуйста, объясните, что вы хотите сделать, когда браузер закроется, чтобы узнать, есть ли другой способ сделать это.
Веб-сервер отправляет свой ответ браузеру, а затем (обычно) закрывает соединение. Вам нужно что-то сделать в Javascript, но это не уловит всех условий. Вы, конечно же, не можете обнаружить его на сервере.
Он может быть обнаружен с помощью onbeforeunload
Javascript onbeforeunload
или onunload
, но это абсолютно не точно, поскольку он не обнаружит:
Также см. Этот ответ .
Например, если вы хотите выйти из системы при закрытии браузера, вам лучше использовать механизм «keepalive» вместо «попрощаться». Затем вы можете занести этих пользователей на сервер (например, с cron
), чьи сессии не были активны (т. Е. Кто еще не отправил «keepalive») более чем на X минут.
Одним из решений, которое, по крайней мере, является безупречным, является отправка пульса на сервер с использованием Javascript и Ajax, а затем предполагается, что окно браузера закрыто, когда сигнал перестает пульсировать.
Другим вариантом будет использование веб-сокетов для поддержания постоянного соединения до закрытия окна браузера.
В любом случае с вашей стороны потребуется немалая работа, чтобы настроить ее
Не только с PHP.
PHP работает на стороне сервера и до сих пор обрабатывает вашу страницу к тому времени, когда у пользователя будет возможность закрыть браузер. Вы могли бы технически определить, продолжал ли PHP обрабатывать страницу, и пользователь закрывает ее, имея определенную конфигурацию. Однако это не идеально. См. connection_aborted()
.
Что вам нужно сделать, так это настроить длинное голосовое соединение с JavaScript и контролировать его на стороне сервера. Затем вы получите представление о том, когда это окно закрыто. Это соединение можно сделать с вашим PHP-скриптом, позволяя PHP проверять connection_aborted()
. Обратите внимание, что для этого вам нужно настроить ignore_user_abort()
, или настроить PHP.ini соответственно.