Rails アプリケーションで、個々のユーザーがサイトで費やした合計時間を追跡したいと考えています。私はそれについて調査しましたが、完璧な解決策を得ることができません。
それはどのように可能ですか。
3 に答える
そんな感じ?
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が言及したように..
サーバーサイドセッションを使用して、サイトで過ごす時間を開始および終了しないのはなぜですか?
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']
を取得し、挿入クエリを作成して情報をデータベースに中継します。
ありがとう。