5

ユーザーが別のページをリクエストしたり、単にサイトを離れたりする前に、ユーザーがページにとどまっている時間を追跡するにはどうすればよいですか?

基本的にはチェックしたいのですが、ユーザーが20分以上ページにとどまっている場合は何かをします。

これにはphpとjavascriptが必要になると思いますが、それを実現する方法が正確にはわかりません。

たぶん、これ$_SERVERをphpで使用して実行時間を取得し、ユーザーが別の場所をクリックしたときにタイムスタンプを取得して、2つを単純に比較しますか?

4

2 に答える 2

7

これはすべて、単純なjavascriptで実行できます。
単一ページの場合:

window.setTimeout(function(){
// Do stuff after 20 minutes of loading the page
// Then using jQuery you can call a PHP script to do stuff like so:
$.ajax({
     url: '/myScript.php',
     method: 'POST',
     success: function(result){
        //The request was successful and the output is stored in a variable: result
     },
     complete: function(){
        //Do stuff when the request is completed (Ignores if success or not)
     },
     beforeSend: function(){
        //Do something before the request is sent
     }
});
}, 20 * 60 * 1000); //This is in milliseconds that's why I use the equation 


複数のページの場合:
ユーザーがページにアクセスした時間にCookieを設定し、各ページでCookieが存在するかどうかを確認することをお勧めします。存在する場合は、x ammount秒ごとにクエリを実行して、Cookieが作成されてから20分が経過したかどうかを確認します。


完全なAjaxドキュメントについては、http://api.jquery.com/jQuery.ajax/にアクセスしてください。

于 2013-03-21T21:29:59.313 に答える
0

私は、ユーザーがWebページにいる時間を計測する小さなJavaScriptライブラリとサービスにいくつかの作業を加えました。これには、ユーザーが実際にページを操作している時間をより正確に(完全ではありませんが)追跡できるという追加の利点があります。ユーザーが別のタブに切り替えたり、アイドル状態になったり、ブラウザを最小化したりする時間を無視します。GoogleAnalyticsメソッドには、新しいリクエストがドメインによって処理されたときにのみチェックするという欠点があります。常に正確です。誰かがあなたのページを表示しなくなったか、ブラウザを最小化したか、最後にページをロードしてからタブを3つの異なるWebページに切り替えたかなどは考慮されません。

参考までに-完璧な解決策はありません。しかし、うまくいけば、これも価値を提供します。Javaacript APIを実装して統計を自分で収集することも、すべてを実行するサービスを使用することもできます。

http://timemejs.com

その使用例:

あなたのページに含める:

<script src="https://timemejs.com/timeme.min.js"></script>
<script type="text/javascript">
TimeMe.initialize({
    currentPageName: "home-page", // page name
    idleTimeoutInSeconds: 15 // time before user considered idle
});
</script>

自分で時間をバックエンドに報告したい場合:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","ENTER_URL_HERE",true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds();
xmlhttp.send(timeSpentOnPage);

TimeMe.jsは、WebSocketを介したタイミングデータの送信もサポートしているため、完全なhttpリクエストをdocument.onbeforeunloadイベントに強制する必要はありません。

于 2017-01-30T22:51:37.973 に答える