تبلیغات :
آکوستیک ، فوم شانه تخم مرغی، صداگیر ماینر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 2 از 2

نام تاپيک: نمایش کاربران آنلاین و بلاک کردن کاربران در Identity 2

  1. #1
    اگه نباشه جاش خالی می مونه ali_i3's Avatar
    تاريخ عضويت
    Mar 2013
    پست ها
    252

    14 نمایش کاربران آنلاین و بلاک کردن کاربران در Identity 2

    درود ,
    دوتا سوال در مورد Identity 2 :

    1 - چطوری میشه یک کاربر رو غیر فعال یا بلاک کرد که نتونه دیگه به سایت وارد بشه و اگر هم تو سایت باشه آنی Logout بشه ؟
    تو StackOverFlaow چند مورد رو تست کردم ولی جواب نگرفتم - فیلد IsEnabled رو هم به جدول کاربران اضافه کردم که در پایین میبینید- اگه امکان داره یکم به زبان شیرین فارسی توضیح بدید.



    2 -چطور میشه فهمید که چه کاربری آنلاینه و چه کاربری آفلاین ؟

    فیلد های زیر کاربردشون چیه ؟

  2. #2
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

    سلام
    این یک سامانه حداقلی است تا نیازهای مرسوم را جواب دهد.
    خودم در یک پروژه شخصی با شش زیر برنامه وب کاملا مختلف از این استفاده کردم
    ولی برای کار شرکت چیزی برای خودمان از صفر نوشتیم.

    نقل قول نوشته شده توسط ali_i3
    چطور میشه فهمید که چه کاربری آنلاینه و چه کاربری آفلاین ؟
    "کاربران آنلاین" بحث مجزایی است و Identity در این حوزه وارد نشده.
    چون HTTP یک پروتکل منفصل است، هیچ مکانیزم مشخصی برای تشخیص کاربران آنلاین وجود ندارد.
    فقط هروقت کاربران دکمه و لینک جدیدی را کلیک کنند، درخواستی ارسال شده و ما میفهمیم کاربر هنوز پشت سیستم نشسته...

    ولی درکل پیاده سازیش زیاد هم سخت نیست.
    میتوانید یک کش(cache) یگانه(singleton) زمان دار ایجاد کنید و کاربران را به آن اضافه کنید.
    تا مثلا ID یا نام هرکاربر از آخرین اتصالش 15 دقیقه در کش بماند.
    اینطور هم تعداد وهم هویت تک تک کاربران آنلاین را دارید.

    برای اینکار میتوانید از کلاس [ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ] استفاده کنید.

    یا همان dll ای که برای تبدیل متنی تاریخ شمسی خدمت تان دادم کلاسی به نام Diamond.Bussines.CacheSingleTime دارد که مناسب این قبیل کارهاست.

    نقل قول نوشته شده توسط ali_i3
    چطوری میشه یک کاربر رو غیر فعال یا بلاک کرد که نتونه دیگه به سایت وارد بشه و اگر هم تو سایت باشه آنی Logout بشه ؟
    این کمی سخت تر است!

    مفهوم Lockout در Identity گرچه نیم بند برای منظور شما هم شاید کار کند ولی هدفش چیز دیگری است.
    اگر LockoutEnabled فعال باشد و تاریخ LockoutEndDate هم پرباشد، کاربر فقط امکان Login در صفحه User-Pass را نخواهد داشت.
    این برای حملاتی موسوم به brute-force است... وقتیکه فردی مدام تلاش میکند و گذرواژه های مختلف را امتحان میکند، مفهوم Lockout امکان میدهد تا دسترسی Loginبه یک Username خاص را برای 10 دقیقه یا 15 دقیقه و... مسدود کنیم.


    برای این کار هم باید خودتان اقدام کنید
    میتوان با یک فیلدی مانند isenabled در دیتابیس شروع کرد...
    یا حتی میتوان از همان LockoutEnabled و LockoutEndDate استفاده کرد
    ولی مشکل در جای دیگری بروز میکند


    درواقع مشکل اولیه از آنجا بروز میکند که وقتی شما بظاهر یک صفحه را در مرورگر باز میکند یک درخواست http ارسال نمیشود، یعنی درعمل همزمان ده ها درخواست مستقل http به سرور ارسال میشود، آنهم بابت رویت یک صفحه.

    Identity برای سرعت بیشتر و همچنین کاهش تراکنش با دیتابیس از کوکی های رمزنگاری شده استفاده میکند.

    توضیح زیاد میتوان داد... حوصله من و شما سرخواهد رفت...
    خلاصه آنکه شما میگویید اگر کاربر در سایت هم باشد sign-out شود(؟!) اجازه دهید من بدترش را بگوییم تا خیالتان راحت (شاید هم ناراحت!) شود.

    وقتی کاربر از صفحه Login و درج User,Pass رد شد دیگر خرش از پل گذشته ... !
    حتی اگر صفحه را ببندد و پس فردا مجدد وارد سایت شود، بدلیل وجود کوکی رمزنگاری شده ، هسته مرکزی Identity او را تشخیص هویت داده و خودکار لاگین میکند و نکته مهم آنکه برای اینکار از دیتابیس هم استفاده نمیکند !
    پس تغییر isenabled نه تنها روی کاربران آنلاین شما، بلکه روی کاربران آفلاین شما هم تاثیر نمیگذارد !

    راه حل:
    باید کدی در فاز Authenticate بنویسید تا isenabled را از دیتابیس برای آن کاربر خاص بررسی کند.
    البته انجام هرباره این کار برای هردرخواست Http شاید باعث کمی کندی سرعت شود.

    برای جلوگیری از افت سرعت میتوانید یک dictionary یگانه(singleton) از ID کاربر به bool داشته باشید که وضعیت isenabled کاربران را با بارگذاری تنبل (lazy-loading) نگهداری کند تا بتوانید با تغییر تنظیمات امنیتی این مخزن را clear کنید، فراموش نکنید باید مفهوم های چند ریسمانی و انواع قفل ها(lock) و... را هم لحاظ کنید.
    یا
    برای جلوگیری از کندی سرعت میتوانید از روش های change-tracker-versioning استفاده کنید.
    (خودم در کارهای شخصی و هم در شرکت از Diamond.Bussines.ChangeTrackerCollection استفاده کردم ولی الان که فکر میکنم، گمانم نیاز شما بتوان بدون این کلاس هم با کمی کد برآورده کرد...)

    حالا سرتان را درد آوردم و دیروقت هم است...
    شما کمی روی این مسائل تحقیق وکار کنید، ببینید تا کجایش را انجام میدهید.
    موفق باشید.
    Last edited by _H2_; 01-08-2017 at 00:14.

  3. این کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده است


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •