Intereting Posts

Обнаружение выхода браузера в PHP

Я рассмотрел несколько тем (здесь и 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 соответственно.