ユーザーがバックグラウンド プロセスを開始できるページがあります。ユーザーがページを更新したり、タブやブラウザを閉じたりした場合に備えて、このプロセスを停止したいと思います。試してみconnection_abort()
ましたがうまくいきませんでした。スクリプトはそのまま実行されます。何か案は?
質問する
240 次
2 に答える
0
ユーザーに一意の識別子があり、これをプロセス ID と関連付けたり、保存したりできる場合は、次のロジックが機能します。
- ユーザーリクエストページ
- ユーザーには一意の ID が与えられます
- バックグラウンド プロセスが開始され、その ID がユーザー ID とともにデータベースに記録されます。
- プロセスは、選択した頻度でデータベースをチェックし続け、データベース内のレコードが存在しない場合、または期待どおりでない場合、プロセス自体を停止します。
- 次に、ユーザー用のフロントエンドは次のいずれかになります。
- 必要なときに ajax を介してスクリプト (つまり、stop_process.php?user=id) をトリガーします。つまり、ページが移動したときです。このアプローチは、onbeforeunload が特定のブラウザーで ajax リクエストを防止または停止するため、信頼できない場合があります。
- db 内のプロセス レコードをタイムスタンプで更新し続ける ajax ポーリング スクリプトを用意します。このスタンプが古くなった場合 (つまり、ユーザーが別の場所に移動したか、js を停止したことを意味します)、プロセスが停止します。
上記はかなり複雑な解決策です(そして、JavaScript に依存しているため気まぐれかもしれません) ので、本当に必要な場合、またはターゲット ユーザーをロックダウンできる場合にのみ検討する必要があります。
js 以外のソリューションとして、ポーリング メソッドに依存し、メタリフレッシュ フレームを設定できます。ただし、これにより、古いバージョンの Internet Explorer のユーザーが絶え間ない「クリック」に気が狂う可能性があります。ソリューションがかなり洗練されていないことは言うまでもありません。
于 2012-10-05T10:51:55.050 に答える
0
あなたは運が悪いと思います。http
ページが提供されるとすぐに接続が閉じられます。
いくつかの ajax トリック以外に、ユーザーがブラウザーを更新したり閉じたりしたことを知る方法はありません。
于 2012-10-05T10:28:22.163 に答える