3

Rails アプリケーションで、個々のユーザーがサイトで費やした合計時間を追跡したいと考えています。私はそれについて調査しましたが、完璧な解決策を得ることができません。
それはどのように可能ですか。

4

3 に答える 3

7

そんな感じ?

var time,timeSite;
window.onload=function(){
 time=new Date();
}


window.onbeforeunload=function(){
 timeSite=new Date()-time;
 window.localStorage['timeSite']=timeSite;
 //store it with whatever serverside language.
}

さらに追加したい場合window.onblur

このコードは機能します.. ajaxもうまく機能します...

極端な解決策では、(例のように) localstorage に保存し、次のログイン時に ajax を実行します。

これは正確な時間を秒単位で提供します...

おおよその時間が必要で、localstorage を持っていないユーザーの場合は、5 分ごとに setTimeout を追加します

ajax と localstorage が機能しない場合、更新時間が経過します。


これは、onbeforeunload 関数内でテストするための ajax 呼び出しです。

railsurl必要に応じて変更してください。

var x=new XMLHttpRequest;x.open('get','railsurl?time='+timeSite);x.send();

そして@Yiğitcan Uçumが言及したように..

サーバーサイドセッションを使用して、サイトで過ごす時間を開始および終了しないのはなぜですか?

于 2014-01-07T13:27:02.267 に答える
0

jquery unload ()イベント ハンドラーを使用して、この状況を処理できます。

例 :

track.php などのサーバー側スクリプトを作成して、収集したすべての追跡の詳細をデータベースに保存します。

/*   Assuming you are tracking authenticated users the */

Javascript の場合:

var loggedInAt;
var loggedOutAt;

var userId = getUserId (); 

function getUserId () {
 return userId; // Define a mathod for getting the user if from a cookie or any local variables.
}

function getTotalTimeSpent() {
 return (loggedOutAt - loggedInAt);
}

$(document).ready(function() {
  loggedInAt = Date.getTime(); // get the start time when the user logged in

  $(window).unload(function() {
      loggedOutAt = Date.getTime();
      totalTimeSpent = getTotalTimeSpent(loggedOutAt, loggedInAt);
      $.ajax({ 
        url: "www.yoursite.com/track.php",
        method:post,
        data: {'TotalTimeSpent': totalTimeSpent, 'UserId' : userId}
      })
    });
}

tracking.php 内:

変数$_REQUEST['TotalTimeSpent'] & $_REQUEST['UserId']を取得し、挿入クエリを作成して情報をデータベースに中継します。

ありがとう。

于 2014-01-07T13:37:53.913 に答える