ユーザーがページを閲覧している時間を監視する簡単な方法はありますか?
Google アナリティクスはこの機能を使用して、ウェブサイトの訪問者が特定のページに滞在した時間を確認できるようにします。このようなものは PHP や JavaScript で再現できますか?
ユーザーがページを閲覧している時間を監視する簡単な方法はありますか?
Google アナリティクスはこの機能を使用して、ウェブサイトの訪問者が特定のページに滞在した時間を確認できるようにします。このようなものは PHP や JavaScript で再現できますか?
はい、簡単です。ページの読み込み時にタイマーを開始し、ユーザーがページを離れたときにそれをサーバー スクリプトに送信してログに記録します。
ページ離脱イベントをトリガーするには、こちらをお読みください。
クライアント側コードの例:
<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 を使用します。
これを行うための一般的な方法は、あるページ ビューと次のページ ビューの間の時間を単純に測定することです。ただし、これには多くの「落とし穴」があります。
これらの問題を回避するためのもう 1 つの一般的な方法は、サーバーをポーリングすることです。これは、ロング ポーリング (接続が 1 分ほどデータ転送なしで開いたままになり、その後すぐに別の接続が確立される) か、5 秒ごとにサーバーへのヒットを繰り返すことで実行できます。帯域幅の消費がはるかに少ないため、ロングポーリング方式をお勧めします。
window.onbeforeunload
このメソッドを使用して ajax 呼び出しを開始できると思います。ページがロードされたら時間を記録し、アンロードしたら経過時間を ajax でサーバーに送信します。ページには応答が表示されないことは明らかですが、それは問題ではありません。
Brad が指摘するように、これはやや信頼性に欠けます。別の方法は、サーバーを数秒ごとに経過時間で更新することです。平均して、最後の更新からユーザーが離れるまでの時間を考慮して、経過時間にも間隔の半分を追加する必要があります。たとえば、10 秒ごとに更新し、最後の更新で 40 秒と表示されていた場合、45 秒あったと仮定します。これは、記録されない 40.0 秒から 49.999 秒の間のケースをカバーしています。
これは、ユーザーが特定の Web ページ (および場所) を見ているかどうかを追跡するコントローラー環境で実行できます。これは、ユーザーが電話をかけたり、他のタブに切り替えたり、ブラウザーを開いたときに毎日行うすべてのことなど、一般的なことのみにブラウザー内追跡を使用する場合、問題を解決するのに役立ちます。