まず、関連するデータ テーブル構造、4 つのフィールドを紹介します:
コードは次のとおりです:
uid
session_id
login_time
logout_time
1 を取得します。実装方法は、ユーザーがログインした後のレコードにuid、session_id、login_timeを挿入し、クライアントjsでタイマーを設定します。たとえば、ログアウト時刻を更新する目的を達成するために10分ごとにサーバーにリクエストを送信します。もちろん、間隔を短く設定するほどデータの精度は高くなりますが、それに応じてシステムへの負荷が高くなります。これは実際の状況に基づいて適切な値に設定できます。このメソッドは、Web ゲームで広く使用されています。Web ゲームのほとんどすべてのリクエストが Ajax リクエストであり、ページが更新されるとタイマーの値が失われるためです。これがこのメソッドの制限でもあります。
2. サーバー上でスケジュールされたポーリング スクリプトを設定します。この方法は、サーバー側でスケジュール実行スクリプトを記述し、例えば5分に1回実行し、各セッションのsession_idがサーバー上に存在するかどうかをデータベース内のレコードに基づいて判断します。 、logout_time が存在しない場合はスキップされます。これによりオンライン時間を正確にカウントすることもできますが、サーバーを制御する必要があるという欠点があります。そうでないと、Linux システムでは crontab を介してタイミング スクリプトを設定でき、Windows システムではスケジュールされたタスクを介してこれを実行できます。仮想ホストを購入したばかりの場合、この方法も適していません。
3. ユーザーがアクティビティを実行するたびにログアウト時間を更新します。このように、ユーザーが非アクティブであるかログアウトすると、ログアウト時刻がデータベースに自然に存在します。これは、この記事で焦点を当てた解決策でもあります。実装方法は以下の通りです。
まず、ユーザーが正常にログインした後、ユーザーの uid と session_id を記録し、現在時刻をログイン時刻として使用し、現在の時刻 600 秒をログアウト時刻として使用して、データベースに挿入します。
コードは次のとおりです:
コードのコピー コードは次のとおりです:
$uid = $_SESSION[uid] = $info[id];
$session_id = $_SESSION[session_id] = session_id(); time();
$ logout_time = time() 600;
$sql = "メンバーログイン (uid,session_id,login_time,logout_time) 値に挿入します($uid,$session_id,$login_time,$logout_time)"; sql);
その後、ユーザーがアクティビティを実行するたび、つまりセッションが存在する場合、つまりログインしている場合、ユーザーのログアウト時間が更新されます。
if($_SESSION[uid]){
$uid = $_SESSION[uid];
$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 サイトに適用でき、追加の機能がないことです。サーバー要件を満たし、ユーザーのオンライン時間を正確にカウントすることもできます。
データベースの更新操作が増加し、システムの負荷が増加するというデメリットもありますが、中小規模の Web サイトでは問題になりません。