سلام بزرگان
خسته نباشید
من میخوام به سایتم این قابلیت رو اضافه کنم که در هر لحظه تعداد افرادی که در حال بازدید از سایت هستند رو نمایش بده.
درست مثل همین انجمن که می تونیم ببینیم چند نفر آنلاین هستند چند نفر از اعضای سایت و چند نفر مهمان هستند و این که صفحه ای خاص چند نفر بازدید کننده دارد.
حالا ایا برای انجام این کار راهی سراغ دارید؟ ایا کتابخانه و بسته ای خاص رو باید نصب کنم یا اینکه خودم باید کدش رو بنویسم؟
متشکرم
برای اینکار راهحلهای مختلفی هست. متداولترین اونها که توی اغلب سایتها استفاده میشه اینه که یه بازهی زمانی رو برای فعالیت کاربران درنظر بگیرین (مثلاً 20 دقیقه) و یک فیلد در دیتابیس در جدول کاربران برای آخرین زمان فعالیت کاربر درنظر بگیرین و با لاگینکردن و حرکت بین صفحات مختلف سایت و کلاً هر فعالیتی که انجام میده، اون فیلد رو با زمان جاری (Timestamp) بروزرسانی کنید. حالا موقع نمایش کاربران آنلاین، رکوردهایی از جدول کاربران که از آخرین زمان فعالیتشون تا الان، کمتر از 20 دقیقه گذشته رو بعنوان کاربر آنلاین نشون بدین. علت این موضوع اینه که اغلب کاربران بدون اینکه لینک خروج از سایت رو کلیک کنن، مرورگر رو میبندن و دسترسی و کنترل کامل روی وضعیت ورود و خروجشون ندارین و آخرین زمان فعالیت، مکانیزم مطمئنتری برای محاسبهی کاربران آنلاین محسوب میشه.
درمورد اعضای مهمان هم میتونین یه جدول دیگه داشته باشین که User Agent کاربر و IP و آخرین فعالیتش رو نگهداری میکنین و ترکیب User Agent و IP رو کلید اصلی میکنین و توی هر فعالیت میهمان (کسانی که عضو نیستن)، یه کوئری شبیه این رو اجرا میکنید:
INSERT INTO `guests` VALUES ('{$userAgent}', '{$ip}', '{$timeStamp}') ON DUPLICATE KEY UPDATE `ts`='{$ts}'
به این ترتیب، اگه رکوردی برای یک کاربر ثبت بشه (با IP و User Agent یکسان)، در دفعات بعد فقط Timestamp اصلاح میشه و میتونین با روشی مشابه کاربران آنلاین، تعداد میهمانان آنلاین رو که وارد سایتتون شدن و آنلاین محسوب میشن (بیشتر از 20 دقیقه از آخرین فعالیتشون نگذشته) رو پیدا کنین و نمایش بدین. با کمک User Agent هم میتونین رباتهای گوگل و بینگ و یاهو و... رو تشخیص بدین و جداگانه نشون بدین (درصورت تمایل).
و چطور میتونم بفهمم چند نفر در حال دیدن صفحه ی خاصی هستند؟
مثلا همین الان که من در حال تایپ در این صفحه هستم پایین صفحه نوشته شده
کاربران در حال بازدید این موضوع:شهاب1024
این رو چطور میشه داشته باشیم؟
شما میتونین برای هر صفحه یه کد درنظر بگیرین. مثلاً اگه صفحاتتون داینامیک هستن، ID صفحه توی دیتابیس رو مدنظر قرار بدین و هروقت کسی وارد صفحهای شد، فیلد page_id رو که از قبل به جدول کاربران اضافه کردین، با id اون صفحه بروزرسانی کنین. موقع نمایش آمار هم کسانی که آنلاین هستن (روش قبلی) و صفحهی جاری براشون مشخص شده رو بشمارین.
ID صفحات رو در دیتابیس؟
مگه صفحات ID دارن؟
ممکنه توضیح مختصری در مورد این مطلب بدین؟ من فکر می کردم که کلاس های مدل رو در پایگاه داده ذخیره می کنیم چیزی در مورد ذخیره کردن ID صفحات نشنیده بودم
ببینید امروزه خیلی از سایتها صفحاتشون پویا هستن یعنی واقعاً یک صفحه بصورت HTML روی دیسک ذخیره نشده و برحسب پارامترهایی که ارسال میشه، محتوا از دیتابیس استخراج و نمایش داده میشه. برای مثال وقتی کاربری آدرس mysite.com/?post=25 رو درخواست میکنه، مطلب شمارهی 25 از دیتابیس استخراج و نمایش داده میشه. در این حالت اصطلاحاً میگیم ID این صفحه 25 هست. برای صفحاتی هم که ایستا هستن (بصورت فایل HTML واقعی ذخیره شدن)، میتونین اسم فایل رو بعنوان id درنظر بگیرین و توی فیلدی که گفتم ذخیره کنین. بعداً با جستجو در دیتابیس میتونین بفهمین توی هر صفحه چه کسانی هستن (توی فیلد مربوطه، ID صفحهای که الان داخلش هستیم ذخیره شده و کاربر مربوطه هم آنلاین هست).