PDA

View Full Version : تشخیص لاگین شدن یک یوزر متد FormsAuthentication



spicirmkh
دوشنبه 06 اردیبهشت 1389, 14:02 عصر
سلام

من از متد FormsAuthentication در تشخیص هویت استفاده می کنم

چطور می توانم سمت سرور متوجه بشوم که این یوزر لاگین کرده است یا نه ( اجازه دسترسی 2 یا چند تا کاربر به یک یوزر و پسورد نداشته باشد )

با تشکر

Keramatifar
دوشنبه 06 اردیبهشت 1389, 16:18 عصر
دوست عزیز
به چند روش میتونی اینکار رو انجام بدی
یکی از ساده ترین روش ها برای اینکار اینه که یک فیلد از نوع Boolean به Users Table اضافه بکنی به نام Lock که موقع Login مقدارش رو True کنی و هنگام LogOut مقدار Flalse ...

spicirmkh
دوشنبه 06 اردیبهشت 1389, 18:21 عصر
دوست عزیز
به چند روش میتونی اینکار رو انجام بدی
یکی از ساده ترین روش ها برای اینکار اینه که یک فیلد از نوع Boolean به Users Table اضافه بکنی به نام Lock که موقع Login مقدارش رو True کنی و هنگام LogOut مقدار Flalse ...

این روش درست نیست اگر User بدون اینکه logout کنه و صفحه ببندد همیشه login است

اوبالیت به بو
دوشنبه 06 اردیبهشت 1389, 21:02 عصر
این روش درست نیست اگر User بدون اینکه logout کنه و صفحه ببندد همیشه login است
چه باید کرد؟

alireza_s_84
دوشنبه 06 اردیبهشت 1389, 21:58 عصر
سلام

من از متد FormsAuthentication در تشخیص هویت استفاده می کنم

چطور می توانم سمت سرور متوجه بشوم که این یوزر لاگین کرده است یا نه ( اجازه دسترسی 2 یا چند تا کاربر به یک یوزر و پسورد نداشته باشد )

با تشکر

سلام اینطوری میتونی بفهمی که کاربر لاگین کرده یا نه (تعیین هویت شده یا خیر) :

User.Identity.IsAuthenticated()
و اینجوری هم میشه فهمید که کاربر با چه یوزرنیمی لایگن شده یا تعیین هویت شده:

User.Identity.Name
اینجوری هم میتونی بفهمی که کاربری جز نقش (Role) مد نظر هست یا نه:

User.IsInRole("RoleName");
نکته: این خصوصیت حتی با Provider های سفارشی هم قابل دسترس هست.
موفق باشی

Behrouz_Rad
دوشنبه 06 اردیبهشت 1389, 22:13 عصر
پست 2 ناقص توضیح داده شده چون در مورد هندل logout "به خوبی" توضیح داده نشده.
پست 5 هم منظور دوستمون رو متوجه نشده.

اسامی افراد login شده رو می تونی یا در Cache یا در جدولی در دیتابیس ذخیره کنی. فیلد مهمی که باید حتماً داشته باشی، تاریخ آخرین فعالیت کاربر هست. در هر بار HIT که به جدول یا Cache رجوع می کنی، اگر زمان آخرین فعالیت کاربر با زمان جاری مثلاً 30 دقیقه اختلاف داشت، کاربر رو از لیست کاربران آنلاین خارج می کنی.
زمانی هم که کاربر قصد login داشت، بررسی می کنی که آیا نام کاربری اون در لیست کاربران آنلاین وجود داره یا خیر.

موفق باشید.

alireza_s_84
دوشنبه 06 اردیبهشت 1389, 22:23 عصر
پست 2 ناقص توضیح داده شده چون در مورد هندل logout "به خوبی" توضیح داده نشده.
پست 5 هم منظور دوستمون رو متوجه نشده.

اسامی افراد login شده رو می تونی یا در Cache یا در جدولی در دیتابیس ذخیره کنی. فیلد مهمی که باید حتماً داشته باشی، تاریخ آخرین فعالیت کاربر هست. در هر بار HIT که به جدول یا Cache رجوع می کنی، اگر زمان آخرین فعالیت کاربر با زمان جاری مثلاً 30 دقیقه اختلاف داشت، کاربر رو از لیست کاربران آنلاین خارج می کنی.
زمانی هم که کاربر قصد login داشت، بررسی می کنی که آیا نام کاربری اون در لیست کاربران آنلاین وجود داره یا خیر.

موفق باشید.
مهندس ایشون گفته چطور می توانم سمت سرور متوجه بشوم که این یوزر لاگین کرده است یا نه نگفته که آیا فرد آنلاین هست یا نه .
بهر حال اگر منظورش این باشه که کاربر آنلاین هست یا نه راه حل شما درسته البته به نظر من cache برای اینکار مناسب نیست چون ممکنه با کمبود حافظه اشیا ذخیره شده بپره و بهتره از دیتابیس استفاده بشه البته اگر من بودم از یک فایل XML استفاده میکردم چون سرعت خوندن و نوشتنم میرفت بالا

Vahid_moghaddam
دوشنبه 06 اردیبهشت 1389, 22:32 عصر
مهندس ایشون گفته چطور می توانم سمت سرور متوجه بشوم که این یوزر لاگین کرده است یا نه نگفته که آیا فرد آنلاین هست یا نه .
بهر حال اگر منظورش این باشه که کاربر آنلاین هست یا نه راه حل شما درسته البته به نظر من cache برای اینکار مناسب نیست چون ممکنه با کمبود حافظه اشیا ذخیره شده بپره و بهتره از دیتابیس استفاده بشه البته اگر من بودم از یک فایل XML استفاده میکردم چون سرعت خوندن و نوشتنم میرفت بالا

می تونیم در هنگام remove شدن از CacheItemRemovedCallback استفاده کنیم و اطلاعات رو ذخیره کنیم. و دوباره (البته نه در این delegate)، اطلاعات رو به cache اضافه کنیم

Behrouz_Rad
دوشنبه 06 اردیبهشت 1389, 22:34 عصر
مهندس ایشون گفته چطور می توانم سمت سرور متوجه بشوم که این یوزر لاگین کرده است یا نه نگفته که آیا فرد آنلاین هست یا نه .

ادامه ی جمله رو نخوندی؟ هدف دوستمون این هست که دو نفر نتونن همزمان با یک ID لوگین کنند.
وقتی که من روی یک سیستم با یک ID لوگین می کنم و روی سیستم دیگه ای میرم، مسلمه که User.Identity.IsAuthenticated همیشه False رو بر میگردونه در صورتی که من در جای دیگه ای login کردم!


به نظر من cache برای اینکار مناسب نیست چون ممکنه با کمبود حافظه اشیا ذخیره شده بپره و بهتره از دیتابیس استفاده بشه البته اگر من بودم از یک فایل XML استفاده میکردم چون سرعت خوندن و نوشتنم میرفت بالا

این بستگی به تخمین تعداد کاربران سایت و حجم آنلاین بودن داره. XML هم می تونه کاملاً بلا استفاده بشه. من تجربه ی پیاده سازی یک سیستم بزرگ رو با XML دارم. البته در اون لحظه قرار نبود سیستم اینقدر بزرگ بشه اما روند کار تغییر کرد و متاسفانه سیستم نتونست پاسخگو باشه و به SQL Server سویچ کردم.

موفق باشید.

Vahid_moghaddam
دوشنبه 06 اردیبهشت 1389, 22:45 عصر
آقای راد بهتر نیست از ترکیبی از cache و دیتابیس استفاده کنیم؟

alireza_s_84
دوشنبه 06 اردیبهشت 1389, 22:48 عصر
این بستگی به تخمین تعداد کاربران سایت و حجم آنلاین بودن داره. XML هم می تونه کاملاً بلا استفاده بشه.
کاملا موافقم :لبخندساده:

Behrouz_Rad
دوشنبه 06 اردیبهشت 1389, 23:45 عصر
آقای راد بهتر نیست از ترکیبی از cache و دیتابیس استفاده کنیم؟
منظورت از ترکیب چطوریه؟ من که لزومی در استفاده ی همزمان نمی بینم.

Vahid_moghaddam
سه شنبه 07 اردیبهشت 1389, 00:04 صبح
اگه اطلاعات مربوط به کاربران آنلاین رو در Cache نگه داریم، با remove شدن مثلا به خاطر کمبود حافظه، اطلاعات از بین می ره. برای حل این مشکل در CacheItemRemovedCallback اطلاعات رو در دیتابیس ذخیره کنیم و دوباره با ایجاد cache اون ها رو به حافظه منتقل کنیم.

Behrouz_Rad
سه شنبه 07 اردیبهشت 1389, 00:25 صبح
Cache مشکلی داره و اون هم اینه که میزان حافظه ای که سیستم شما می تونه روی یک Shared Server داشته باشه مشخص نیست. با توجه به اینکه اکثرا Host ها از یک App Pool یکسان برای چندین سایت استفاده می کنند، میزان حافظه ای که سایت شما می تونه مصرف کنه به نسبت سایت های دیگه سنجیده میشه و اگر سایتی بیش از میزانی که واسش در App Pool مشخص شده حافظه مصرف کنه، سایت شما رو تحت تاثیر قرار میده... بنابراین Cache در حالتی که تعداد کاربران آنلاین یا در کل حجم اطلاعات در حافظه زیاد هست پیشنهاد نمیشه.

موفق باشید.

spicirmkh
سه شنبه 07 اردیبهشت 1389, 08:03 صبح
پست 2 ناقص توضیح داده شده چون در مورد هندل logout "به خوبی" توضیح داده نشده.
پست 5 هم منظور دوستمون رو متوجه نشده.

اسامی افراد login شده رو می تونی یا در Cache یا در جدولی در دیتابیس ذخیره کنی. فیلد مهمی که باید حتماً داشته باشی، تاریخ آخرین فعالیت کاربر هست. در هر بار HIT که به جدول یا Cache رجوع می کنی، اگر زمان آخرین فعالیت کاربر با زمان جاری مثلاً 30 دقیقه اختلاف داشت، کاربر رو از لیست کاربران آنلاین خارج می کنی.
زمانی هم که کاربر قصد login داشت، بررسی می کنی که آیا نام کاربری اون در لیست کاربران آنلاین وجود داره یا خیر.

موفق باشید.

این HIT چی است و چطور با Cache سرور ارتباط برقرار کنم

Behrouz_Rad
سه شنبه 07 اردیبهشت 1389, 08:54 صبح
این HIT چی است و چطور با Cache سرور ارتباط برقرار کنم
وقتی که کاربری قصد لوگین داره به Data Source مراجعه می کنی و رکوردهایی رو پیدا می کنی که زمان جاری منهای زمان آخرین فعالیت کاربر مثلاً از 30 دقیقه بیشتره. اونها رو حذف می کنی و سپس با SELECT مشخص می کنی که آیا نام کاربری که قصد لوگین داره در لیست کاربران آنلاین وجود داره یا خیر.

موفق باشید.

spicirmkh
چهارشنبه 08 اردیبهشت 1389, 08:53 صبح
وقتی که کاربری قصد لوگین داره به Data Source مراجعه می کنی و رکوردهایی رو پیدا می کنی که زمان جاری منهای زمان آخرین فعالیت کاربر مثلاً از 30 دقیقه بیشتره. اونها رو حذف می کنی و سپس با SELECT مشخص می کنی که آیا نام کاربری که قصد لوگین داره در لیست کاربران آنلاین وجود داره یا خیر.

موفق باشید.

مشکل اینجاست که از کجا کاربر آنلاین پیدا کنم ؟ اگر به database مراجعه کنم و آنجا ثبت کرده باشم اگر فقط یک کاریر وصل بشه و ligin کند و بدون logout صفحه ببندد و کمتر 1 دقیقه بخواهد وصل شود می گوید کاربر دیگری وصل است در حالی کسی نیست ؟

آیا هر user که لاگین می کند سمت سرور یک sesion ID نمی گیرد ؟ و آیا می شود تست کرد این session ID اکتیو است یا نه ؟

Behrouz_Rad
چهارشنبه 08 اردیبهشت 1389, 12:54 عصر
مشکل اینجاست که از کجا کاربر آنلاین پیدا کنم ؟ اگر به database مراجعه کنم و آنجا ثبت کرده باشم اگر فقط یک کاریر وصل بشه و ligin کند و بدون logout صفحه ببندد و کمتر 1 دقیقه بخواهد وصل شود می گوید کاربر دیگری وصل است در حالی کسی نیست ؟

شما یک کوکی روی سیستم کاربر با زمان Expire برابر با 30 دقیقه قرار بده و این زمان رو با هر درخواست مدام آپدیت کن... اگر کاربر بدون اینکه logout کنه از سایت خارج بشه (با این فرض که شما اون رو logout تلقی و مجددا از اون می خوای که login کنه)، وقتی که مجدداً لوگین می کنه، با بررسی وجود کوکی می تونی متوجه بشی که هنوز جزء کاربران آنلاین هست و به اون اجازه بدی که وارد سایت بشه. اگر کوکی وجود نداشت، پس بیش از 30 دقیقه از آخرین فعالیت کاربر گذشته و کوکی وجود نداره و در لیست کاربران آنلاین نیست.

موفق باشید.