2011-09-13 10 views
1

誰かがページにどれくらい滞在しているかを追跡する最良の方法は何ですか?私はGoogleアナリティクスがこれを行うことを知っていますが、私はデータをプリセットデータベース内にローカルに保存する必要があります。誰かがPHPを使用してページを見ている時間を記録する最も簡単な方法は何ですか?

これについて最善の方法はありますか?

+0

これはPHPではできません。ユーザーがナビゲートしたときにサーバー側に通知するjavascriptが必要です。 – ZeissS

答えて

3

あなたは、ページがブラウザで開かれている期間や、現在が表示されているか、ブラウザや別のウィンドウの別のタブに切り替えられたことを知ることはできません。

フォーラムの「現在接続しているユーザー」のリストが非常に不正確な理由です。場合によっては、ユーザーが接続されている間に、ユーザーがブラウザーを閉じてPCを数分間シャットダウンしていることが表示されます。

通常のAJAXリクエストをお使いのサーバーに送信することができます。これは、例えば、ウェブベースのチャットアプリケーションがはるかに正確で、実際に接続されているユーザの数を、サーバとの情報交換頻度が非常に高いため、実際に表示することができる理由です。

しかし、それは価値がありますか?それはあなたの帯域幅とあなたの訪問者の帯域幅を無駄にします。 訪問者の中には、このような方法で追跡されたくないものがあります。は、あなたのウェブサイトの使用を中止します。また、いくつかのメトリックを取得する場合、それらは依然として不正確です。最後に、訪問者1人あたりのユニークビジター数とリクエスト数を測定することは、ウェブサイトにとっては非常に重要です。

+0

あなたはこのページにフォーカスを持っているかどうかを追跡するためにjavascriptの関数とイベントを持つことができるので、ユーザーがこのページにフォーカスを持っているかどうかを判断することは多少可能です。 –

+0

@Robin Castlin:あなたのブログを読んでいると想像してください。また、いくつかの音楽を聴きたいと思っています。だから私はあなたのブログをフルスクリーンで持っており、私はメディアプレーヤーを操作することに集中しました。私はまだここにいて、実際にあなたのブログを読んでいる間、私は離れていると信じています。さて、あなたのブログに再度切り替えましたが、私の接続はダウンしていました。だから1時間は読んでいるが、1時間前にあなたのサイトを離れたと思う。私が言ったように、近似はできますが、Webアプリケーションのサンドボックス化モデルは、ユーザーが現在何をしているのかを知ることができません。うまくいけば。 –

+0

+1「一部の訪問者はこのように追跡されたくない」 – Herbert

2

私はあなたがページを離れたときにJavaScriptを発することができると信じています。 JavaScriptでタイマー/カウンタを実行している場合、値がajaxとしてサーバーに送信され、送信された秒数が表示されます。

私がこの解決策で不確かなのは、すべてのブラウザがページを変更する前にこのajaxを送信する時間があるかどうかだけです。

EDIT:Here's an exampleイベントで。

一部のブラウザでこの方法が無効な場合は、教えてください。

1

okこれはPHPでそれを行う方法です。 誰かがページを閲覧する時間= 2つのHTTPリクエストの間の時間。

あなたはセッション変数$ timeを作成できます。まだ設定されていない場合は0に設定し、すでに設定されている場合は0に設定してからその値を取り出して $ time = time()にリセットします。興味のある方のため

$time = $_SESSION['time'] ; 
if(!$time) 
{ 
$_SESSION['time'] = 0; 
}else { 
if($time != 0) 
$timeSpentByUserOnPage = time() - $time; 

$_SESSION['time'] = time(); 

}

0

、私は、ユーザーがWebページと対話する方法を長い時間、小さなJavaScriptライブラリの中にいくつかの仕事を入れています。ユーザーがページと実際にやり取りしている時間をより正確に(ただし完全ではありませんが)追跡するという追加の利点があります。ユーザーが別のタブに切り替えてアイドル状態になったり、ブラウザを最小化したりする時間は無視されます。

確かに、MainMaが示唆しているように、このレベルのトラッキングが嫌なユーザーもいます。

https://github.com/jasonzissman/TimeMe.js

その使い方の例:

document.onload = function() { 
    TimeMe.setIdleDurationInSeconds(30); 
    TimeMe.setCurrentPageName("my-home-page"); 
    TimeMe.initialize(); 
} 

ページに費やした時間を取得し、ときにユーザーにサーバーに送信:あなたのページのロードで

あなたのページを離れる:

window.onbeforeunload = function (event) { 
    xmlhttp=new XMLHttpRequest(); 
    xmlhttp.open("POST","ENTER_URL_HERE",false); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    var timeSpentOnPage = TimeMe.getTimeOnCurrentPageInSeconds(); 
    xmlhttp.send(timeSpentOnPage); 
}; 
関連する問題