PDA

View Full Version : سوال: بدست آوردن کاربران آنلاین واقعی



s.programmer
دوشنبه 23 اردیبهشت 1392, 11:20 صبح
سلام دوستان
من یک جدول دارم که کاربرانی که در سیستم لاگین شده اند رو در اون جدول ثبت می کنم.
اگر کاربری دکمه خروج رو بزنه متوجه می شم و از تو جدولم پاکش میکنم ، اگر کاربری بدون زدن دکمه خروج صفحه رو ببنده من چجوری باید متوجه بشم که این کاربر دیگه آنلاین نیست؟

MMSHFE
دوشنبه 23 اردیبهشت 1392, 11:26 صبح
نمیشه. منطقی ترین و عملی ترین راه اینه که با ورود هر کاربر، یک رکورد حاوی اطلاعات Session اون کاربر (مثلاً session_id) توی یک جدول که برای کاربران آنلاین گذاشتین، همراه با Timestamp درج کنید و با هر کاری که انجام میده (حرکت از یک صفحه به صفحه دیگه) فیلد Timestamp همون رکورد رو تغییر بدین. مدت زمانی رو هم مشخص کنید (مثلاً 10 دقیقه) که اگه کاربر فعالیتی انجام نداد، رکوردش حذف بشه. موقع نمایش کاربران آنلاین هم از جدول مربوطه، فقط رکوردهایی رو نشون بدین که اختلاف Timestamp اونها با زمان جاری، کمتر از 10 دقیقه است.

s.programmer
دوشنبه 23 اردیبهشت 1392, 11:48 صبح
ممنون از کمکتون
اما دو تا سوال
1- این راه حل از لحاظ امنیتی مشکلی نداره؟
2-و اینکه آیا من می تونم لیست تمام سشن هایی که روی سرور ذخیره شده است رو داشته باشم؟!!

dousti_design
دوشنبه 23 اردیبهشت 1392, 12:12 عصر
نمیشه. منطقی ترین و عملی ترین راه اینه که با ورود هر کاربر، یک رکورد حاوی اطلاعات Session اون کاربر (مثلاً session_id) توی یک جدول که برای کاربران آنلاین گذاشتین، همراه با Timestamp درج کنید و با هر کاری که انجام میده (حرکت از یک صفحه به صفحه دیگه) فیلد Timestamp همون رکورد رو تغییر بدین. مدت زمانی رو هم مشخص کنید (مثلاً 10 دقیقه) که اگه کاربر فعالیتی انجام نداد، رکوردش حذف بشه. موقع نمایش کاربران آنلاین هم از جدول مربوطه، فقط رکوردهایی رو نشون بدین که اختلاف Timestamp اونها با زمان جاری، کمتر از 10 دقیقه است.
با اجازه اقای شهرکی.
توی مرورپرهای بغیر از کروم و اپرا ما میتونیم هنگام بسته شدن صفحه یک عمل اسکریپتی رو انجام بدیم (ajax). حالا ما میام وقتی مرورگر(و یا تب) بسته شد یه درخواست به یه صفحه php میفرستیم و اونجا هم میایم و این کاربر رو از فهرست آنلاین ها خارج میکنیم. اینجوری:


<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
window.onunload = function()
{
$.ajax({
url: "test/ajax.php",
type: "json",
async: false,
cache: false
}).done(function( html ) {
alert(html);

});
}
</script>

البته توی مرورگر کروم کار نمیکنه. میشه؟
.
و یک راه دیگه هم که بنظرم میرسه توی صفحاتمون setTimeOut میذاریم و هر مثلا 10 ثانیه چک میکنیم ببینیم کاربری که اومده بود تو صفحه الانم هست یا رفته.(فروم مجیدآنلاین بنظرم این کار رو کرده بود)

MMSHFE
دوشنبه 23 اردیبهشت 1392, 12:18 عصر
این روش عملیه ولی چند مشکل داره:
1- JS قابل غیرفعال شدنه و درنتیجه این روش هم ار کار میفته.
2- درخواست هر 10 ثانیه به سرور با حجم بالای کاربران یک فاجعه است، مگه اینکه سرور اختصاصی و پرقدرت داشته باشین.

MMSHFE
دوشنبه 23 اردیبهشت 1392, 12:20 عصر
1- این راه حل از لحاظ امنیتی مشکلی نداره؟
2-و اینکه آیا من می تونم لیست تمام سشن هایی که روی سرور ذخیره شده است رو داشته باشم؟!!
1- خیر مشکلی نداره
2- لیست تمام سشنها رو خیر مگه اینکه خودتون محتوای پوشه محل ذخیره سازی فایلهای سشن رو بخونید که روی هاستهای اشتراکی یا اجازه ندارین و یا اگه دسترسی داشته باشین، به دردتون نمیخوره چون فایلهای سشن سایر سایتهای اون هاست هم همونجا قرار داره و نمیدونید کدوم مال سایت شماست.
البته همونطور که گفتم میتونید موقع ورود هر کاربر، خودتون SessionID اون کاربر رو توی دیتابیس بگذارین و هرموقع خواستین، چک کنید ببینید فایلش هنوز توی پوشه محل ذخیره سشن روی هاست وجود داره یا نه.

Veteran
دوشنبه 23 اردیبهشت 1392, 12:39 عصر
جناب شهرکی
وقتی مرورگر بسته میشه و دوباره ما بخوایم وارده سایت بشیم سشن از بین رفته!
این سشن توسط چه چیزی از بین میره ؟ توسط خوده زبان ؟
اگر توسط پی اچ پی از بین میره و این هم اپن سورس هست
نمیشه دست توی کد ها برد و وقتی سشن رو خواست از بین ببره یک ندایی بده ؟

MMSHFE
دوشنبه 23 اردیبهشت 1392, 16:24 عصر
توی همه مرورگرها اینطور نیست. درواقع این کار بسته به مرورگر هست. ضمناً همیشه هم اینطور نیست که بلافاصله فایل سشن از بین بره. بنابراین روش قابل اعتمادی نیست. راستش مدتی میخواستم با کار روی سورس کد PHP متدی بنویسم که یک شماره سشن (SessionID) بگیره و بگه این سشن برای کلاینت جاری معتبر هست یا نه و به جاهای خوبی هم رسیدم ولی فرصت نکردم کاملش کنم. کلاً دردسرش زیاده و خیلی هم ضروری نیست و همون روش که گفتم جواب میده.

Veteran
دوشنبه 23 اردیبهشت 1392, 16:49 عصر
کار روی سورس کد PHP متدی بنویسم که یک شماره سشن (SessionID) بگیره و بگه این سشن برای کلاینت جاری معتبر هست یا نه و به جاهای خوبی هم رسیدم ولی فرصت نکردم کاملش کنم.کد ها کجا ذخیره میشن ؟ میخوام روی این قضیه یکم کار کنم

MMSHFE
دوشنبه 23 اردیبهشت 1392, 20:32 عصر
سورس کدهای PHP رو باید از سایتش بگیرین. توی قسمت Download دو بخش داره (Binary و Source) که شما باید سورس رو دانلود کنید و بعد از اعمال تغییرات، کامپایل کنید.