1

ユーザーがページを閲覧している時間を監視する簡単な方法はありますか?

Google アナリティクスはこの機能を使用して、ウェブサイトの訪問者が特定のページに滞在した時間を確認できるようにします。このようなものは PHP や JavaScript で再現できますか?

4

4 に答える 4

2

はい、簡単です。ページの読み込み時にタイマーを開始し、ユーザーがページを離れたときにそれをサーバー スクリプトに送信してログに記録します。

ページ離脱イベントをトリガーするには、こちらをお読みください

クライアント側コードの例:

<html>
...
<script>
var visit_start_time_ms = (new Date).getTime();
window.onbeforeunload = function() {
    var visit_time = (new Date).getTime() - visit_start_time_ms;
    xmlhttp=new XMLHttpRequest();
    xmlhttp.open("GET","http://your-tracking-server.com/track.php?track_url=...&visit_time=" + visit_time,true);
    xmlhttp.send();
};
</script>
...
</html>

your-tracking-server.com/track.php のサーバー側スクリプト:

...
mysql_query('INSERT INTO track_visit_time (url, time) VALUES ("'.myescape($_GET['track_url']).'", '.float($_GET['visit_time']).')');
...

クライアント側はテストされておらず、クロスブラウザではないことに注意してください。サーバー側は非推奨の関数 mysql_query を使用します。

于 2011-11-18T16:41:43.657 に答える
1

これを行うための一般的な方法は、あるページ ビューと次のページ ビューの間の時間を単純に測定することです。ただし、これには多くの「落とし穴」があります。

  • 最後にページが読み込まれた時間がわかりません
  • あなたはバウンスの時間を知りません
  • 複数のタブで発生する問題とそうでない問題
  • 誰かがあなたのページに 4 時間滞在しましたか、それともブラウザを閉じて戻ってきましたか?

これらの問題を回避するためのもう 1 つの一般的な方法は、サーバーをポーリングすることです。これは、ロング ポーリング (接続が 1 分ほどデータ転送なしで開いたままになり、その後すぐに別の接続が確立される) か、5 秒ごとにサーバーへのヒットを繰り返すことで実行できます。帯域幅の消費がはるかに少ないため、ロングポーリング方式をお勧めします。

于 2011-11-18T16:39:40.440 に答える
0

window.onbeforeunloadこのメソッドを使用して ajax 呼び出しを開始できると思います。ページがロードされたら時間を記録し、アンロードしたら経過時間を ajax でサーバーに送信します。ページには応答が表示されないことは明らかですが、それは問題ではありません。

Brad が指摘するように、これはやや信頼性に欠けます。別の方法は、サーバーを数秒ごとに経過時間で更新することです。平均して、最後の更新からユーザーが離れるまでの時間を考慮して、経過時間にも間隔の半分を追加する必要があります。たとえば、10 秒ごとに更新し、最後の更新で 40 秒と表示されていた場合、45 秒あったと仮定します。これは、記録されない 40.0 秒から 49.999 秒の間のケースをカバーしています。

于 2011-11-18T16:39:30.063 に答える
0

これは、ユーザーが特定の Web ページ (および場所) を見ているかどうかを追跡するコントローラー環境で実行できます。これは、ユーザーが電話をかけたり、他のタブに切り替えたり、ブラウザーを開いたときに毎日行うすべてのことなど、一般的なことのみにブラウザー内追跡を使用する場合、問題を解決するのに役立ちます。

于 2011-11-18T16:44:07.003 に答える