phpの下でユーザーのオンライン時間を統計する試み

2184 ワード

次に、一般的な方法をいくつか示します.
まず、関連するデータテーブル構造、4つのフィールドについて説明します.
 
  
uid : id
session_id : session_id,PHP session_id()
login_time
logout_time

1.クライアントは、サーバ側に要求をタイミング的に送信する.実装方法は、ユーザーがログインした後、uid,session_をid,login_timeはレコードを挿入し、クライアントjsにタイマを設定し、例えば10分ごとにサーバ側に要求を送信して登録時間を更新する目的を達成する.もちろん、この間隔時間設定が短いほど、データが正確になる可能性があるが、対応するシステムの負荷も高くなり、実際の状況に応じて適切な値を設定することができる.この方法はwebgameに広く応用されている.webgameのほとんどの要求はajax要求であり、ページをリフレッシュする必要がないため、ページをリフレッシュすると、このタイマーは価値を失う.これもこの方法の限界である.
2.サーバは、タイミングポーリングのスクリプトを設定します.この方法は、サーバ側に5分に1回実行するなどのタイミングで実行されるスクリプトを書き、データベース内のレコードに基づいてセッションごとのsession_を判断することです.idがサーバ上に存在するかどうか、存在する場合はlogout_を更新するtime、存在しないならスキップします.これによりオンライン時間を正確に統計することもできますが、欠点はサーバーの制御権が必要で、さもなくばタイミングスクリプトを設定することができなくて、linuxシステムはcrontabを通じて実現することができて、windowsシステムは計画任務を通じて完成することができます.仮想ホストを買っただけでは、この方法もあなたには向いていません.
3.ユーザーがアクティブになるたびに、ログアウト時間を更新します.これにより,ユーザがアクティブでない場合や終了した場合に,登録時間が自然にデータベースに存在することも,本稿で重点的に検討するスキームである.以下に、実装方法を示す.
まず、ユーザログインに成功した後、uid,session_を記録するidは,現在時刻を登録時刻,現在時刻+600 sを登録時刻としてデータベースに挿入する.
 
  
$uid = $_SESSION['uid'] = $info['id'];
$session_id = $_SESSION['session_id'] = session_id();
$login_time = time();
$logout_time = time()+600;
$sql = "INSERT INTO member_login (uid,session_id,login_time,logout_time) values($uid,'$session_id',$login_time,$logout_time)";
mysql_query($sql);

そして,ユーザが活動するたびに,すなわちページをクリックするたびにセッションが存在する,すなわちログイン状態にある場合に,ユーザのログイン時間を更新する.
 
  
if($_SESSION['uid']){
$uid = $_SESSION['uid'];
$session_id = $_SESSION['session_id'];
$logout_time = time()+600;
$sql = "UPDATE member_login SET logout_time=$logout_time WHERE uid=$uid AND session_id='$session_id'";
mysql_query($sql);
}

この方法の利点は、比較的簡単に実現でき、多くのWebサイトに適用でき、追加のサーバ要件がなく、ユーザーのオンライン時間を比較的正確に統計できることです.
欠点も明らかで、データベースの更新操作を増やし、システムの負荷を増やしたが、中小規模のウェブサイトにとっては問題ではないはずだ.