یکی از راه حل های استاندارد این امر که در اکثر فوروم های php و امثال آن استفاده می شود ، در مقاله ی php زیر بررسی شده :
http://www.phpbuddy.com/article.php?id=15
Overview: You must have seen on some sites displaying the number of users online, this scripts exactly does that it displays number of users currently browsing your site.
The table structure
CREATE TABLE useronline (
timestamp int(15) DEFAULT '0' NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
PRIMARY KEY (timestamp),
KEY ip (ip),
KEY file (file)
);
User's Online Displays the numbers of users on your website at any one time.
<?php
$server = "xxx";
$db_user = "xxx";
$db_pass = "xxx";
$database = "xxx";
$db = mysql_connect($server, $db_user,$db_pass);
mysql_select_db($database,$db);
$timeoutseconds = 300; //5 minutes
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;
$insert = mysql_query("INSERT INTO useronline VALUES ('$timestamp','$REMOTE_ADDR','$PHP_SELF')" ,$db);
if(!($insert)) {
print "Useronline Insert Failed > ";
}
$delete = mysql_query("DELETE FROM useronline WHERE timestamp<$timeout",$db);
if(!($delete)) {
print "Useronline Delete Failed > ";
}
$result = mysql_query("SELECT DISTINCT ip FROM useronline WHERE file='$PHP_SELF'",$db);
if(!($result)) {
print "Useronline Select Error > ";
}
$user = mysql_num_rows($result);
mysql_close();
if($user == 1) {
print("$user user online\n");
} else {
print("$user users online\n");
}
?>
در این مقاله جدولی برای یوزرهای آنلاین با رکوردهایی از 5 دقیقه قبل درست شده.
سپس IP های یونیک کاربران حاضر در سایت در دیتابیس ذخیره می شود.
در ادامه این افراد اضافه شده در این بازه زمانی (که بر اساس زمان استاندارد یونیکس کار کرده) شمارش می شوند و همچنین یوزرهای قبل از 5 دقیقه قبل از این جدول حذف می شوند. (با توجه به فیلد file آن، این کانتر یوزرها روی هر صفحه ای ، به صورت جداگانه قابل اعمال است)
خوب! این مقاله برای نمایش دادن تمام کاربران حاضر در سایت مناسب است. (چه یوزر و چه مهمان)
برای توسعه آن می توان کمی سورس رو تغییر داد.
یک فیلد is_user بهتر است به جدول اضافه شود با مقدار پیش فرض صفر (یعنی مهمان). (حالت یک یعنی یوزر)
کاربری که به سایت وارد شده (فرقی نمی کند چه وضعیتی دارد) با پیش فرض صفر (مهمان)، آی پی اش ثبت می شود.
سپس هنگامیکه لاگین کرد، در لحظه چک کردن یوزر نیم و پسورد ، در همین جا آی پی او با فیلد is_user=1 ثبت می شود. (اگر آی پی تکراری بود و در مشخصات بازدیدکنندگان از 5 دقیقه قبل وجود داشت ، فقط بیت مربوط به is_user به 1 باید ادیت و آپدیت شود. )
در این حالت کوئری نهایی به سادگی بر اساس فیلد is_user قابل انجام است (چه از لحاظ نمایش تعداد یوزرها و مهمانها ، چه از لحاظ نمایش اسامی و چه از لحاظ نمایش تصاویر و avatars .)
کد فوق نیازی به استفاده مستقیم از سشن ها ندارد. بنابراین تاثیر منفی آنچنانی روی منابع سیستمی نخواهد گذاشت.
در آخر با یک فایل php جداگانه برای سورس فوق و سپس include کردن آن در سورس صفحه می توان این مورد را به یک ماژول تبدیل کرد (برای استفاده مجدد از کد).
در ASP.NET با یک یوزر کنترل ، کار به صورت ماژول قابل استفاده مجدد در می آید.