PDA

View Full Version : سوال: مکانیزم شناسایی کاربر و مشخص شدن صفحه ای که در حال مشاهده است!



Jason.Bourne
دوشنبه 10 اسفند 1388, 18:45 عصر
تا حدودی از عنوان تاپیک مشخص هست که منظورم چی بوده است اما یک مثال هم میزنم.

همین انجمن vBulletin در قسمت های مختلف انجمن (زیر انجمن ها، صفحه اصلی انجمن) تعداد کاربرانی که در آن قسمت از انجمن قرار دارند را نمایش می دهد (مثلا در پائین هر زیر انجمن نوشته شده "کاربران فعال حاضر 10 نفر"). مکانیزم پیاده سازی همچین چیزی به چه شکل است.

خودم فکر میکنم که با session میشه همچین کاری انجام دارد. اما برنامه به چه شکل میتونه به session های رجیستر شده توسط کاربران دسترسی داشته باشه؟؟!

Reza1607
چهارشنبه 12 اسفند 1388, 10:03 صبح
فکر کنم اگه داخل پایگاه داده قسمت اطلاعات فردی یک فیلد بذاری که مشخص کنه که طرف آنلاین هست یا نه بذاری بهتر باشه

Jason.Bourne
چهارشنبه 12 اسفند 1388, 10:11 صبح
وقتی که کاربر وارد سایت میشه برای اون یک جلسه ایجاد میشه و اگر 10 کاربر وارد سایت بشن برای هر یک بازهم یک جلسه ایجاد میشه. حالا به چه طریق برنامه می تونه به این جلسات دسترسی داشته باشه؟!

امید امرایی
چهارشنبه 12 اسفند 1388, 12:09 عصر
این کار با session انجام نمی شه دوست عزیز.
اگه شما موقعیت فعلی کاربر رو در یک session نگه دارید چطور می تونید به session کاربر های دیگه دسترسی داشته باشید.

برای انجام این چنین کارهایی باید وضعیت کنونی کابر ها رو در پایگاه داده ثبت و نگهداری کنید.

Jason.Bourne
چهارشنبه 12 اسفند 1388, 12:14 عصر
نکته همین جا هست که بار اول، اینکه کاربر کجا هست را چطور بدست بیاریم که داخل دیتابیس ذخیره کنیم. این نکته برای من مبهم است!

Reza1607
چهارشنبه 12 اسفند 1388, 12:38 عصر
مگه یک کاربر نباید وارد سیستم بشه تا به اطلاعات دسترسی داشته باشه خوب اگه اینجوری زمانی که کاربر لاگین می کنه اون یک فیلد رو به نشانه ورود به سیستم تغییر می دی و هر صفحه ای رو که می خوای بدونی چه کسانی آنلاین هستند این فیلد رو چک می کنی تا مشخص بشن

Jason.Bourne
چهارشنبه 12 اسفند 1388, 12:47 عصر
کاربری که لاگین نمیکنه چی؟! (مثل همین کاربرهای مهمان انجمن)

Reza1607
چهارشنبه 12 اسفند 1388, 12:50 عصر
با استفاده از
$_SERVER['PHP_SELF'] و
$_SERVER['REQUEST_URI '] می تونی بفهمی که کاربر کدوم صفحه رو درخواست کرده و بعد اطلاعاتی رو که می خواهی ذخیره کن

mojtaba_kz
دوشنبه 12 تیر 1391, 18:00 عصر
فکر کنم اگه داخل پایگاه داده قسمت اطلاعات فردی یک فیلد بذاری که مشخص کنه که طرف آنلاین هست یا نه بذاری بهتر باشه


خب برای آفلاین شدن چه کار باید کرد

با فرض اینکه ما برای آنلاین بودن پس از وزود مقدار 1 را به دیتایس میدیم و برای آفلاین بودن مقدار 0 را
یه وقتی هست که کاربر روی دکمه خروج کلید میکند که این مشکلی نیست

ولی اگر کاربر دکمه close مرورگر رو زد چه باید کرد؟؟؟؟

***من از ایده شما میخواهم برای برنامه نویسی asp.net تحت سی شارپ استفاده کنم...
منتظر راهنمایی شما هستم

Jason.Bourne
دوشنبه 12 تیر 1391, 19:36 عصر
خب برای آفلاین شدن چه کار باید کرد

با فرض اینکه ما برای آنلاین بودن پس از وزود مقدار 1 را به دیتایس میدیم و برای آفلاین بودن مقدار 0 را
یه وقتی هست که کاربر روی دکمه خروج کلید میکند که این مشکلی نیست

ولی اگر کاربر دکمه close مرورگر رو زد چه باید کرد؟؟؟؟

***من از ایده شما میخواهم برای برنامه نویسی asp.net تحت سی شارپ استفاده کنم...
منتظر راهنمایی شما هستم

یک راهش این هست
1- در دیتابیس تاریخ آخرین حضور در سایت را ثبت میکنی.
2- بعد از یک زمان مشخص (مثلا هر 10 دقیقه یکبار) هر رکوردی که بیش از 10 دقیقه هست که آپدیت نشده را به عنوان Logout شده فرض میکنی.

plague
سه شنبه 13 تیر 1391, 04:28 صبح
روش معمول اینجوریه
2 تا تیبل نیازه یکی
Online_users
یکی هم
page_visitors

حالا من فقط با ایپی میگم کاری به لاگین شده ها ندارم
توی تمام صفحات آیپی کاربر رو به همراه زمان فعلی و آیدی صفحه فعلی
میگیری و توی تیبل online_users میازاری البته اگه آیپی از قبل وجود داشت فقط زمان و آیدی صفحه رو آپدیت میکنی
و توی همون لحظه که اینکارو میکنی تمام آیپی هایی که آخرین فعلایتشون بیش از 10 دقیقه مثلا بود رو هم خارج شده فرض میکنی و پاک میکنی اینطوری تیبل هم سنگین نمیشه

اما اینکه توی کدوم صفحه چند تا بازدید کننده هست توی تیبل page_visitors برای هس صفحه یه آیدی مشخص میکنی و یه فیلد هم برای کانتر میزاری (اگه صفحات داینامیک ایجاد بشن میشه از آیدی که هم اکنون موجوده استفاده کرد یا توی همون تیبل کانتر گزاشتبراشون )

اینجاشو بهتره که با تریگر انجام بدین
هر وقت یوزری به تیبل online_users اضافه شد توی page_visitors به کانتر صفحه ای که یوزر اومده یدونه اضافه میکنی
اگه از online_users حذف شد (لاگ اوت ) از page_visitors یدونه از کانترش کم میکنی
اگر هم online_users آپدیت شد توی page_visitors یدونه از کانتر آیدی قدیمی کم و به کانتر آیدی جدید اضافه میکنی

Jason.Bourne
سه شنبه 13 تیر 1391, 10:11 صبح
اینجاشو بهتره که با تریگر انجام بدین


نکته این کار چی هست؟

plague
سه شنبه 13 تیر 1391, 10:38 صبح
کد خیلی تمیز تر و خلاصه تر میشه , سرعت اجرا بالا میره

مثلا وقتی یوزر صفحه رو تغییر میده و به صفحه جدید میره

شما باید اول یه سلکت بکنی که قبلا تو چه صفحه ای بوده
بعد کانتر اون صفحه رو یدونه کم بکنی
بعد صفحه جدید رو کانترش رو یدونه زیاد بکنی
بعدش میای تیبل یوزر های آنلاین رو آپدیت میکنی
تقریبا 4 بار باید به دیتابیس وصل بشید و کوئری اجرا کنید

در حالی که با ترگیر شما یکبار وصل میشید و تیبل یوزر های آنلاین رو فقط آپدیت میکنی بقیه عملیات همونجا انجام میشه نوشتن تریگرش هم خیلی ساده تر از کد کوئری هستش اون 3 تا کوئری اول توی یک تریگر خلاصه میشه