نمایش نتایج 1 تا 6 از 6

نام تاپیک: به دست آوردن تعداد کاربران حاضر برروی سایت

  1. #1

    به دست آوردن تعداد کاربران حاضر برروی سایت

    سلام
    برای به دست آوردن تعداد افراد حاضر برروی سایت چه باید کرد ؟
    در ضمن آیا راهی برای به دست آوردن Ip های این افراد نیز وجود دارد ؟

  2. #2
    شما با استفاده از 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 نمایید.

  3. #3
    خیلی ممنون دوست عزیز - لطف کردید
    اما سوالی که دارم اینه که اگه فرد بیشتر از زمان فرضی یا کمتر از آن زمان ( همان 5 دقیقه ) بود چه طور میشه مدیریت کرد .
    آیا راهی غیر از کار با database نیز وجود دارد ؟

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

  5. #5
    کاربر دائمی آواتار cybercoder
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    root/
    پست
    2,018
    در ادامه توضیحات آقای جواد باید عرض کنم که این امر کاملا نسبیه و تا به امروز نشده که به طور مطلق بگی که چند نفر واقعا On-Line هستند

  6. #6
    آقا حرف نداره بهترین راه ممکن همینه که این آقا واست نوشته...
    دیگه بحث هم نکن...
    اگر بخوای تعداد آنلاین ها رو دقیق تر بدونی باید اون 5 دقیقه رو کم کنی ولی این ترافیک دیتابیس رو زیاد میکنه

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •