PDA

View Full Version : گفتگو: عدم مجاز بودن ورود چند کاربر با یک username



S_O_S1982
جمعه 05 شهریور 1389, 11:14 صبح
با سلام و احترام خدمت دوستان محترم

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

حالا من یه برنامه دارم که windows applications هست ، تو بانک اطلاعاتی این برنامه ، جدولی هست که نامهای کاربری توش هست هرکسی با استفاده از این جدول میتونه وارد برنامه بشه
مشکل اینجاست که با یک نام کاربری ، چندین نفر میتونن وارد بشن ، خواستم برای اینکه هر نام کاربری فقط برای یک کاربر استفاده بشه ، از فیلدی استفاده کنم که مثلا به محض اینکه کسی که لاگین کرد با یک username اون فیلد مثلا مقدارش از 0 بشه 1 و هر وقت لاگ آف کرد اون فیلد مقدارش از 1 بشه 0 ، اما مشکل اینه که تو این سیستم مشکل هنگ کردن ، برق رفتن ، ریست شدن ، قعطی شبکه و .... زیاد هست و من نمی دونم از چه فرآیندی برای تشخیص لاگ آف کردن کاربر یا ریست شدن سیستم یا هنگ کردن و قعطی شبکه استفاده کنم .

می خواستم ببینم دوستان چه راه حلی و پیشنهاد می دن

ممنونم از توجه شما

East.Tiva
جمعه 05 شهریور 1389, 14:19 عصر
یه فیلد بذار بنام LastActiveDateTime توی اون فیلد هربار که کاربر یک کاری رو انجام میده این فیلد رو با DateTime.Now بروز کن.

اگر آخرین فعالیتی که کاربر داشته بیشتر از 20 یا 30 دقیقه پیش بوده، می تونی اون کاربر رو لاگ آف شده درنظر بگیری.

S_O_S1982
شنبه 06 شهریور 1389, 13:19 عصر
یه فیلد بذار بنام LastActiveDateTime توی اون فیلد هربار که کاربر یک کاری رو انجام میده این فیلد رو با DateTime.Now بروز کن.

اگر آخرین فعالیتی که کاربر داشته بیشتر از 20 یا 30 دقیقه پیش بوده، می تونی اون کاربر رو لاگ آف شده درنظر بگیری.


دوست عزیز از نظر و ارایه ی راه حلی که بیان کردین ممنونم
راه حل شما و راه حل منظقی و خوبی محسوب میشه اما محدودیت های استفاده ی من از راه حل شما اینطوری هست که تو این سیستم ، کاربری که log in کرده ،ممکنه از سیستم فقط برای جستجو استفاده کنه ، یعنی فرض کن یه جستجو کرده تا 3 ساعت دیگه هم کاری با سیستم نداره ،
اگه بخوام از روشی که فرمودین برم ، کاربر رو باید logoff کنم ، و کاربر مجبور میشه در روز چند بار نام کاربری و پسوردش را چند بار وارد کنه که من نمی خوام به این صورت بشه ، و اگه بخوام این کار رو بکنم ، مطمئن با اعتراض کارمند ها مواجه می شم

راه حل دیگه ای برای این مشکل به ذهنتون نمی رسه ؟

DoDoklak
یک شنبه 07 شهریور 1389, 12:43 عصر
اینکه کسی که لاگین کرد با یک username اون فیلد مثلا مقدارش از 0 بشه 1 و هر وقت لاگ آف کرد اون فیلد مقدارش از 1 بشه 0


شما میتونید همین روش رو ادامه بدید
و وقتی کاربری بدون logoff ازسیستم خارج بشه قاعدتا نمیتونه وارد بشه
شما باید یک امکانی برای کاربر admin بزاری که بتونه فیلد مربوطه رو فعال و غیر فعال کنه و این تغییر فقط مختص کاربر admin باشه
و کاربر در زمانی که این مشکل براش پیش اومد مدیریت رو جهت رفع مشکل در جریان بزاره

من خودم به این شیوه عمل کردم
http://aks98.com/images/t3l0q0vwrmjg6y2kw6ss.jpg

famarini
یک شنبه 07 شهریور 1389, 16:33 عصر
سلام دوست عزيز S_O_S1982 (http://barnamenevis.org/forum/member.php?u=75068)
راه حلي كه دوستمون DoDoklak (http://barnamenevis.org/forum/member.php?u=43259) ارائه دادن كار ساز بود يا خير اگه جواب بدين ممنون مي شم چون از نظر منطقي راه خوبيه و مدير برنامه هم بيكار نمي شه (:

East.Tiva
یک شنبه 07 شهریور 1389, 17:05 عصر
دوست عزیز از نظر و ارایه ی راه حلی که بیان کردین ممنونم
راه حل شما و راه حل منظقی و خوبی محسوب میشه اما محدودیت های استفاده ی من از راه حل شما اینطوری هست که تو این سیستم ، کاربری که log in کرده ،ممکنه از سیستم فقط برای جستجو استفاده کنه ، یعنی فرض کن یه جستجو کرده تا 3 ساعت دیگه هم کاری با سیستم نداره ،
اگه بخوام از روشی که فرمودین برم ، کاربر رو باید logoff کنم ، و کاربر مجبور میشه در روز چند بار نام کاربری و پسوردش را چند بار وارد کنه که من نمی خوام به این صورت بشه ، و اگه بخوام این کار رو بکنم ، مطمئن با اعتراض کارمند ها مواجه می شم

راه حل دیگه ای برای این مشکل به ذهنتون نمی رسه ؟

می تونید راه حل خودتون رو با این راه حل ترکیب کنید. یعنی اگر که فلگ مربوط به لاگین بودن فعال بود. کاربر دیگه نمی تونه لاگین کنه مگر اینکه زمان lastactivity اون expire بشه.

توضیح اش هم اینه که وقتی کاربر لاگین میکنه دوتا چیز رو باید چک کنید:
1) اگر فلگ false بود ، اجازه لاگین به کاربر بدهید
2) اگر فلگ true بود، باید lastactivity هم expire بشه تا اجازه لاگین به کاربر بدهید. (یعنی یک شرط ترکیبی)

بعد از لاگین اون فلگ رو true کنید.
اگر در حالت عادی خارج بشه که فلگ رو false می کنید.
اگر در اثر مشکلی و به طور غیرعادی سیستم بپره بیرون زمانی که می خواهد دوباره لاگین کند باید هر دو شرط بالا برقرار باشد تا بتواند لاگین کند.

(طبیعی هست که زمانی که سیستم در اثر یک مشکل نتواند خارج شود، کاربر باید زمانی را صبر کنید تا session قبلی او expire شود)

S_O_S1982
دوشنبه 08 شهریور 1389, 12:12 عصر
می تونید راه حل خودتون رو با این راه حل ترکیب کنید. یعنی اگر که فلگ مربوط به لاگین بودن فعال بود. کاربر دیگه نمی تونه لاگین کنه مگر اینکه زمان lastactivity اون expire بشه.

توضیح اش هم اینه که وقتی کاربر لاگین میکنه دوتا چیز رو باید چک کنید:
1) اگر فلگ false بود ، اجازه لاگین به کاربر بدهید
2) اگر فلگ true بود، باید lastactivity هم expire بشه تا اجازه لاگین به کاربر بدهید. (یعنی یک شرط ترکیبی)

بعد از لاگین اون فلگ رو true کنید.
اگر در حالت عادی خارج بشه که فلگ رو false می کنید.
اگر در اثر مشکلی و به طور غیرعادی سیستم بپره بیرون زمانی که می خواهد دوباره لاگین کند باید هر دو شرط بالا برقرار باشد تا بتواند لاگین کند.

(طبیعی هست که زمانی که سیستم در اثر یک مشکل نتواند خارج شود، کاربر باید زمانی را صبر کنید تا session قبلی او expire شود)


دوست عزیز پس من کی متوجه بشم کسی با نام کاربری شخص دیگه که الان وارد شده و مثلا 1 ساعت هم هست با سیستم کاری نداره ، وارد شده و username اش رو lock کنم؟؟؟

این راه حل ترکیبیتون برای موقعی که من با نام کاربری 1 وارد شدم و 1 ساعت کار نمی کنم و شما هم بعد از 1 ساعت با نام کاربری 1 وارد می شید ، جواب نمیده چون به شما اجازه ی ورود می ده .

S_O_S1982
دوشنبه 08 شهریور 1389, 12:17 عصر
شما میتونید همین روش رو ادامه بدید
و وقتی کاربری بدون logoff ازسیستم خارج بشه قاعدتا نمیتونه وارد بشه
شما باید یک امکانی برای کاربر admin بزاری که بتونه فیلد مربوطه رو فعال و غیر فعال کنه و این تغییر فقط مختص کاربر admin باشه
و کاربر در زمانی که این مشکل براش پیش اومد مدیریت رو جهت رفع مشکل در جریان بزاره

من خودم به این شیوه عمل کردم
http://aks98.com/images/t3l0q0vwrmjg6y2kw6ss.jpg


دوست عزیز ممنونم
اما من تو پست اولم توضیح دادم که تو این سیستم ، قعطی شبکه ، هنگ کردن سیستم و رفتن برق و .... بسیار زیاده ، با روش شما ترافیک درخواست ها از ادمین زیاد می شه

در ضمن اگه با دقت پست اول رو خونده باشید ، متوجه می شین که من می خوام روشی رو پیدا کنم که صددرصد متوجه بشم طرف پسوردش رو به شخص دیگه ای داده ، با این روشی که شما فرمودین ، فرض کنید که من با نام کاربریم تو سیستم هستم ، شما هم با نام کاربری من وارد می شید ، بعدش سیستم نام کاربری رو قفل می کنه ، و ما می ریم به ادمین می گیم سیستم هنگ کرده بود اینطوری شد .، نه ؟
--------------------

سلام دوست عزيز S_O_S1982 (http://barnamenevis.org/forum/member.php?u=75068)
راه حلي كه دوستمون DoDoklak (http://barnamenevis.org/forum/member.php?u=43259) ارائه دادن كار ساز بود يا خير اگه جواب بدين ممنون مي شم چون از نظر منطقي راه خوبيه و مدير برنامه هم بيكار نمي شه (:


من فکر می کنم باید راه حل اصولی تری وجود داشته باشه ، چون چند تا سیستم دیدم که تشخیص می دن کاربر بدون LOgoff خارج شده و یا اینکه logoff کرده .

maktab
جمعه 19 شهریور 1389, 03:07 صبح
تا جایی که من متوجه شدم اگر کاربر بصورت منطقی لاگاف کنه مشکلی در سیستم شما پیش نمیاد و به درستی کار می کنه ولی اگر به هر دلیل غیر منطقی کاربر از سیستم خارج بشه و لاگاف نکنه آن موقع فیلدی که قرار دادید کاربر را فعال نشون می ده و باعث بروز مشکل می شه.
خب من یه پیشنهاد دارد: شما قبل از ورود در صورتی که سیستم اعلام کنه کاربر وارد شده فعاله، سیستم وضعیتش را چک کنه بعدش اگر فعال بودنش منطقی نباشه، کاربر جدید وارد بشه برای این کار هم می تونید یه متد بنویسید و توی زمان ورود یه پیغام به قسمت کاربر وارد شده می فرسته اگر کاربر واقعا فعال باشه خب اعلام می شه که اجازه ورود نداره در غیر این صورت وارد می شه.

zoofa
جمعه 19 شهریور 1389, 03:35 صبح
سلام دوست عزیز
به نظر من شما می تونید هر 1 دقیقه 1 بار از توی برنامتون نام کاربری و زمان رو توی یک فیلد ثبت کنید.

وقتی کاربر می خاد با اون نام کاربری وارد بشه می بینید اگه از زمان ثبت شده واسه اون کاربر تا زمان حال بیش از 1 دقیقه گذشته می تونه وارد بشه. یعنی یا خارج شده یا برق رفته. یا شبکه قطع شده یا هرچی نشون میده برنامش به سرور متصل نیست. یعنی لاگین نیست.
در غیر اینصورت که زمان ثبت شده کمتر از یک دقیقه هست نسبت به زمان حال نشون میده که کاربر لاگین هست و اجازه ورود ندید.

امید وارم مفید باشه.

zoofa
چهارشنبه 24 شهریور 1389, 15:21 عصر
شما میتونید همین روش رو ادامه بدید
و وقتی کاربری بدون logoff ازسیستم خارج بشه قاعدتا نمیتونه وارد بشه
شما باید یک امکانی برای کاربر admin بزاری که بتونه فیلد مربوطه رو فعال و غیر فعال کنه و این تغییر فقط مختص کاربر admin باشه
و کاربر در زمانی که این مشکل براش پیش اومد مدیریت رو جهت رفع مشکل در جریان بزاره

من خودم به این شیوه عمل کردم
http://aks98.com/images/t3l0q0vwrmjg6y2kw6ss.jpg


دوست عزیز طراحی فرمتون جالبه :چشمک: