PDA

View Full Version : جلوگیری از لاگین همزمان یک فرد از دو کامپیوتر



mehrdotnet
سه شنبه 08 آذر 1384, 18:11 عصر
سلام
من توی یک پروژه در فرم لاگین پس از تایید هویت کاربر ، یک session رو مقداردهی میکنم و بعد در لود هر یک از دیگر فرمها مقدار این session رو بررسی میکنم تا ببینم کاربر هویتش تایید شده یا نه؟
توی این حالت این امکان وجود داره که کاربر از طریق دو تا کامپیوتر لاگین کنه و کار انجام بده. من می خوام کاربر رو محدود کنم که اگه روی یک کامپیوتر online شده دیگه نتونه از کامپیوتر دیگه ای دوباره لاگین کنه.
برای پیاده سازی این عمل با توجه به نحوه تایید هویت کاربر و ویژگی های session چه پیشنهادی دارین؟

anubis_ir
چهارشنبه 09 آذر 1384, 11:02 صبح
IP ها رو می تونی چک کنی، چون به احتمال زیاد متفاوت خواهند بود.

titbasoft
چهارشنبه 09 آذر 1384, 11:45 صبح
IP ها رو می تونی چک کنی، چون به احتمال زیاد متفاوت خواهند بود.از طریق IP چه چیزی رو میشه متوجه شد؟ فرض کنید من با username ی ali وارد شدم و IP من هم X است. حالا یه کاربر دیگه با همین username و IP ی Y می خواد Login کنه. از کجا می تونید تشخیص بدید کاربر اول on-line هست یا نه که بتونید اجازه ورود بهش بدید یا نه؟

به نظر من بهترین راه حل برای این مدل کارها (از جمله تشخیص کاربران on-line) استفاده از session ها در حالت SQL Server Mode است. تنها مشکلی که این روش داره (که مشکل بزرگی هم در سرور های اشتراکی به حساب میاد) اینه که چون یکسری job روی sql server روی دیتابیس master تعریف می کنه باید سطح دسترسی بالایی به sql server داشته باشید.

anubis_ir
چهارشنبه 09 آذر 1384, 12:00 عصر
روشی که گفتم ایده ای بود از فوروم invision power board که فقط هم در مورد ادمین اعمال می شود. اگر ادمین لاگین و آنلاین باشد امکان نداره کسی بتونه بجای اون وارد کنترل پنل فوروم سایت بشه.
روش کار اون هم لاگ کردن آی پی ادمین در یک بازه زمانی و کمی کار با دیتابیس است.

روش آی پی کلا در ایران زیاد مؤثر نخواهد بود چون امکان تغییر آن در حین مرور صفحات از طرف ISP‌ وجود دارد.

موفق باشی

titbasoft
چهارشنبه 09 آذر 1384, 12:34 عصر
روشی که گفتم ایده ای بود از فوروم invision power board که فقط هم در مورد ادمین اعمال می شود. اگر ادمین لاگین و آنلاین باشد امکان نداره کسی بتونه بجای اون وارد کنترل پنل فوروم سایت بشه.
روش کار اون هم لاگ کردن آی پی ادمین در یک بازه زمانی و کمی کار با دیتابیس است.من که چیزی سر در نیوردم

anubis_ir
چهارشنبه 09 آذر 1384, 13:38 عصر
واضح بود ... کمی توضیح بیشتر

یک راه ساده بر اساس IP:
یک جدول کاربران آنلاین درست کن.
بر اساس ip ، نام کاربری و زمان لاگین
هر بار که صفحه ریفرش می شود کافی است رکوردهای با طول عمر بیشتر از 5 دقیقه حذف شوند و رکورد کاربر جدید وارد شده به سایت در صورت وجود نداشتن ثبت شود.
به این صورت مشخص می شود که آیا شخصی آنلاین است یا خیر. (الگوریتم قسمت کاربران آنلاین در بیش از 90 درصد سایت‌های پویای وب)
بر همین اساس تا 5 دقیقه هم به هیچ شخص دیگری با ip غیر از شخص آنلاین، می‌شود مجوز ورود را نداد.

این روش ساده تا روزی 1000 بازدید کننده در روز مشکلی از لحاظ کارآیی نخواهد داشت ... (و تست شده)

mehrdotnet
چهارشنبه 09 آذر 1384, 18:40 عصر
anubis_ir عزیز :
روش شما قابل قبوله ولی مشکلی که هست اینکه که زمان زیادی رو این وسط تلف میکنه تا بخواد هر بار جدول کاربران رو بررسی کنه و از طرفی شما لاگین 1000 تا کاربر در روز رو تضمین می کنین ولی این پروژه حالتی داره که ممکنه در یک ساعت بیش از 1000 تا لاگین داشته باشه. بنابراین ریسکش روی سرعت و کارایی با این روش پیاده سازی زیاده.
کسی نظر دیگه ای نداره؟

Behrouz_Rad
چهارشنبه 09 آذر 1384, 23:03 عصر
کلمه ی کاربری کاربر لوگین کرده رو در دیتابیس ذخیره کن و در زمان تلاش برای لوگین (یا حتی قصد ورود کاربر به صفحه ی لوگین)، نام کاربری رو در جدول مربوطه جستجو کن.
اگر نام کاربری پیدا شد، می تونی هر بلایی خواستی سر کاربر بیاری در غیر اینصورت، با فراغ باز به اون اجازه میدی که از موهبت لوگین کردن بهره مند بشه!
ذخیره ی زمان آخریت فعالیت کاربر و چک کردن اون زمان با زمان فعلی برای حذف کاربر آنلاین از دیتابیس در روال BeginRequest فایل Global.asax (برای مبتدی ها) و یا استفاده از HttpHandler (برای حرفه ای ها) نیز فراموش نشه.
موفق باشید.

titbasoft
پنج شنبه 10 آذر 1384, 14:31 عصر
استفاده از HttpHandlerمیشه یه کم بیشتر توضیح بدید

Behrouz_Rad
پنج شنبه 10 آذر 1384, 14:37 عصر
در چه مورد HttpHandler توضیح بیشتری می خواید؟

titbasoft
پنج شنبه 10 آذر 1384, 15:16 عصر
در چه مورد HttpHandler توضیح بیشتری می خواید؟ببخشید جناب راد ، منظورم track کردن user های on-line ب استفاده از HttpHandler بود نه خود HttpHandler

Behrouz_Rad
پنج شنبه 10 آذر 1384, 16:23 عصر
به هرحال، لیست کاربران آنلاین باید به طریقی مرتبا بروز شود.
همان طور که می دونید، یک HttpHandler دارای روالی به نام ProcessRequest است که به ازای تمامی درخواست های ارسال شده به سمت سرور برای پسوندهای استاندارد قابلیت فراخوانی دارد که بدین ترتیب میشه زمان آخرین فعالیت کاربر رو ثبت و احینا اگر در بازه ی زمانی مشخصی فعالیتی انجام نداده، وی را از لیست کاربران آنلاین حذف کرد.
کدنویسی استاندارد ایجاب می کند که به جای نوشتن کدهای مورد نیاز در روال BeginRequest فایل Global.asax برای عملی ساختن فرایند فوق، از یک HttpHandler استفاده کنید.
موفق باشید.

titbasoft
پنج شنبه 10 آذر 1384, 16:33 عصر
ممنون ..............

mehrdotnet
پنج شنبه 10 آذر 1384, 18:43 عصر
جناب راد این عمل (در صورتی که از Global.asax استفاده بشه) تا چه حد روی سرعت سایت (موقع استفاده حدود 1000 کاربر به طور همزمان) تاثیر داره؟

Behrouz_Rad
پنج شنبه 10 آذر 1384, 19:05 عصر
بسیار کم...!!! (Connection Pooling is Used)

این مقاله رو امروز به خاطر شما نوشتم و در لینک زیر می تونید ملاحظه بفرمایید:
http://www.barnamenevis.org/forum/showthread.php?t=33592

و یک مقاله ی دیگر در همین رابطه از بنده:
http://www.barnamenevis.org/forum/showthread.php?t=24152

موفق باشید.

mehrdotnet
پنج شنبه 10 آذر 1384, 19:50 عصر
این مقاله رو امروز به خاطر شما نوشتم

قربون مرامت! امشب سر فرصت مطالعه میکنم. فکر کنم حالا حالاها روی این مسئله مشکل و سوال داشته باشم.
مزاحمتون میشم!!