4

PHPでブラウザの終了を検出することに関するいくつかのトピック(こことグーグル)を見てきましたが、その方法についてはあまり明確ではありません。

PHPで試してみましたregister_shutdown_functionが、ブラウザのページを更新しても実行されていました。

誰でも助けることができますか?

前もって感謝します

4

5 に答える 5

9

PHPはサーバー側の言語です。ブラウザイベントはDOMイベントによって処理されます。「onunload」または「onbeforeunload」イベントで、PHPファイルにAJAX呼び出しを送信します。

そして、この他の質問には、私が言っていることの風味のある説明があります。

于 2012-06-01T11:43:21.880 に答える
4

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.

于 2012-06-01T11:41:24.907 に答える
4

ブラウザを閉じたときに何をしたいのかを説明して、おそらく別の方法があるかどうかを確認してください.

Web サーバーはその応答をブラウザーに送信し、(通常は) 接続を閉じます。Javascriptで何かをしなければならないでしょうが、それはすべての条件をキャッチするわけではありません. サーバー側では確かに検出できません。

onbeforeunloadJavascriptまたは関数を使用して検出できますが、検出されonunloadないため、正確ではありません。

  • ブラウザのクラッシュ
  • ブラウザの終了
  • コンピューターのシャットダウン
  • ページ上のリンクをクリック
  • ブラウザに戻るとき

この回答も参照してください。

たとえば、ブラウザを閉じたときにユーザーをログアウトさせたい場合は、「さようなら」メカニズムではなく「キープアライブ」メカニズムを使用することをお勧めします。cron次に、セッションが X 分以上アクティブでない (つまり、「キープアライブ」を送信していない)ユーザーをサーバーから (たとえば を使用して) ログオフできます。

于 2012-06-01T11:46:31.960 に答える
3

少なくともばかげた耐性のある解決策の1つは、JavascriptとAjaxを使用してサーバーにハートビートを送信し、信号のパルスが停止したときにブラウザーウィンドウが閉じていると想定することです。

もう1つは、Webソケットを使用して、ブラウザーウィンドウが閉じるまで一定の接続を維持することです。

いずれにせよ、それを設定するためにあなたの部分からかなりの作業が必要になります

于 2012-06-01T11:45:50.463 に答える
3

PHPだけではありません。

PHP はサーバー側で実行され、ユーザーがブラウザーを閉じるまでにページの処理は完了しています。特定の構成を使用して、PHP がまだページを処理しており、ユーザーがページを閉じているかどうかを技術的に検出できます。しかし、それは理想的ではありません。を参照してくださいconnection_aborted()

必要なことは、JavaScript でロング ポーリング接続を設定し、サーバー側で監視することです。その後、そのウィンドウがいつ閉じられるかがわかります。その接続は PHP スクリプトに作成され、PHP がチェックできるようになりますconnection_aborted()ignore_user_abort()これが機能するように設定するか、それに応じて PHP.ini を構成する必要があることに注意してください。

于 2012-08-18T16:12:19.167 に答える