PHPでブラウザの終了を検出することに関するいくつかのトピック(こことグーグル)を見てきましたが、その方法についてはあまり明確ではありません。
PHPで試してみましたregister_shutdown_function
が、ブラウザのページを更新しても実行されていました。
誰でも助けることができますか?
前もって感謝します
PHPはサーバー側の言語です。ブラウザイベントはDOMイベントによって処理されます。「onunload」または「onbeforeunload」イベントで、PHPファイルにAJAX呼び出しを送信します。
そして、この他の質問には、私が言っていることの風味のある説明があります。
I don't think there is any foolproof way to detect a browser close button in PHP or Javascript.
It is much safer and better to handle it via timer based polling OR just simple session timeouts on server side.
ブラウザを閉じたときに何をしたいのかを説明して、おそらく別の方法があるかどうかを確認してください.
Web サーバーはその応答をブラウザーに送信し、(通常は) 接続を閉じます。Javascriptで何かをしなければならないでしょうが、それはすべての条件をキャッチするわけではありません. サーバー側では確かに検出できません。
onbeforeunload
Javascriptまたは関数を使用して検出できますが、検出されonunload
ないため、正確ではありません。
この回答も参照してください。
たとえば、ブラウザを閉じたときにユーザーをログアウトさせたい場合は、「さようなら」メカニズムではなく「キープアライブ」メカニズムを使用することをお勧めします。cron
次に、セッションが X 分以上アクティブでない (つまり、「キープアライブ」を送信していない)ユーザーをサーバーから (たとえば を使用して) ログオフできます。
少なくともばかげた耐性のある解決策の1つは、JavascriptとAjaxを使用してサーバーにハートビートを送信し、信号のパルスが停止したときにブラウザーウィンドウが閉じていると想定することです。
もう1つは、Webソケットを使用して、ブラウザーウィンドウが閉じるまで一定の接続を維持することです。
いずれにせよ、それを設定するためにあなたの部分からかなりの作業が必要になります
PHPだけではありません。
PHP はサーバー側で実行され、ユーザーがブラウザーを閉じるまでにページの処理は完了しています。特定の構成を使用して、PHP がまだページを処理しており、ユーザーがページを閉じているかどうかを技術的に検出できます。しかし、それは理想的ではありません。を参照してくださいconnection_aborted()
。
必要なことは、JavaScript でロング ポーリング接続を設定し、サーバー側で監視することです。その後、そのウィンドウがいつ閉じられるかがわかります。その接続は PHP スクリプトに作成され、PHP がチェックできるようになりますconnection_aborted()
。ignore_user_abort()
これが機能するように設定するか、それに応じて PHP.ini を構成する必要があることに注意してください。