PDA

View Full Version : به دست آوردن تعداد کاربران حاضر برروی سایت



moohssenn
یک شنبه 19 فروردین 1386, 13:06 عصر
سلام
برای به دست آوردن تعداد افراد حاضر برروی سایت چه باید کرد ؟
در ضمن آیا راهی برای به دست آوردن Ip های این افراد نیز وجود دارد ؟

javad_hosseiny
یک شنبه 19 فروردین 1386, 14:01 عصر
شما با استفاده از ip و ساعت و تاریخ می بایستی لیست آخرین بازدیدکنندگان سایت خود را در یک جدول ذخیره نمایید.
البته دقت نماید که به هنگام فراخوانی روتین مربوط به انجام این کار ip های تکراری را با ساعت جدید ذخیره نموده و همچنین مواردی )ip) هایی که ساعت ورود آن مثلا از یک دوره زمانی خاص (مثلا 5 دقیقه) بیشتر بود را حذف نمایید.
بدین صورت کاربر تکراری که از سایت شما بازدید می کند به علت داشتن آی پی تکراری دارای رکورد جدید نمی باشد وهمچنین کاربرانی که قبلا از سایت شما بازدیدکرده اند (به علت انجام عملیات حذف رکوردهایی که دارای ساعتی قبل از بازه (همان 5 دقیقه) شما هستند ) را از لیست حذف نمایید.
و نهایتا باید دقت نمایید که این لیست در حقیقت اعلام بازکنندگان آنلاین سایت شما در آن بازه زمانی است

نمونه کد برای انجام این کار:
-- ابتدا جدول ذیل را در دیتابیس خود ایجاد نمایید: (مثلا به نام users_online)


$query=mysql_query("CREATE TABLE `users_online`
(`visitor` VARCHAR( 15 ) NOT NULL ,`lastvisit` INT( 14 ) NOT NULL)");

و بعد در یک فایل جداگانه مثلا به نام onlinesql.php کد ذیل را ذخیره نمایید (که در این فایل عملیات مربوطه (توضیح اول تایپک) انجام گرفته و لیست کاربران آنلاین نمایش داده می شود)



$uo_sessionTime = 5; //length in **minutes** to keep the user online before deleting
//error_reporting(E_ERROR | E_PARSE);

$host_name= "localhost";
$user_db= "root";
$pass_db= "";
$db_name= "database_name";
$connect=mysql_connect($host_name,$user_db,$pass_d b) ;
$sel = mysql_select_db($db_name) ;

$uo_ip = $_SERVER['REMOTE_ADDR'];


//cleanup part
$uo_query = "DELETE FROM users_online WHERE unix_timestamp() - lastvisit >= $uo_sessionTime * 60";
mysql_query($uo_query);

//check/insert part
$uo_query = "SELECT lastvisit FROM users_online WHERE visitor = '$uo_ip'";
$uo_result = mysql_query($uo_query);
if(mysql_num_rows($uo_result) == 0) { //no match
$uo_query = "INSERT INTO users_online VALUES('$uo_ip', unix_timestamp())";
mysql_query($uo_query);
} else { //matched, update them
$uo_query = "UPDATE users_online SET lastvisit = unix_timestamp() WHERE visitor = '$uo_ip'";
mysql_query($uo_query);
}

//count part
if($uo_keepquiet == FALSE) {
$uo_query = "SELECT count(*) FROM users_online";
$uo_result = mysql_query($uo_query);
$uo_count = mysql_fetch_row($uo_result);
echo $uo_count[0];
}
//mysql_close();
البته پیشنهاد می کنم عملیات مربوطه به کانکت به دیتابیس را در یک فایل جداگانه (مثلا connect.php) قرار دهید و در تمام فایلهای که نیاز به انجام عملیات با دیتابیس دارد آن فایل را در ابتدا روتین موردنظر include نمایید.

moohssenn
یک شنبه 19 فروردین 1386, 17:00 عصر
خیلی ممنون دوست عزیز - لطف کردید
اما سوالی که دارم اینه که اگه فرد بیشتر از زمان فرضی یا کمتر از آن زمان ( همان 5 دقیقه ) بود چه طور میشه مدیریت کرد .
آیا راهی غیر از کار با database نیز وجود دارد ؟

javad_hosseiny
یک شنبه 19 فروردین 1386, 19:08 عصر
این زمان قابل تغییر است ولیکن اگر بیشتر از زمان فرضی باشد که خوب کاربر دیگری که سایت را بازدیدکنند فرد قبلی را به عنوان بازدیدکنند آنلاین نخواهد داشت و کمتر از آن باشد که نیز توضیح دادم ساعت ورودش بروز می شود و از آن لحظه 5 دقیقه بعدی لحاظ می شود.
(البته این روش یک روش متعارف و متداول می باشد اگر سورس کد انجمنهای همچون phpbb,vb,... را ملاحظه کنید نیز از همین روش استفاده کرده اند)

cybercoder
یک شنبه 19 فروردین 1386, 20:50 عصر
در ادامه توضیحات آقای جواد باید عرض کنم که این امر کاملا نسبیه و تا به امروز نشده که به طور مطلق بگی که چند نفر واقعا On-Line هستند

Aidin
پنج شنبه 23 فروردین 1386, 15:39 عصر
آقا حرف نداره بهترین راه ممکن همینه که این آقا واست نوشته...
دیگه بحث هم نکن...
اگر بخوای تعداد آنلاین ها رو دقیق تر بدونی باید اون 5 دقیقه رو کم کنی ولی این ترافیک دیتابیس رو زیاد میکنه