نمایش نتایج 1 تا 11 از 11

نام تاپیک: جلوگیری از ورود همزمان دو کاربر

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    پست
    133

    جلوگیری از ورود همزمان دو کاربر

    سلام
    چگونه میتوان از ورود همزمان دوکاربر با یک نام کاربری جلوگیری کرد البته برای این کار می دانم یک جدول برای کاربران آنلاین می سازم و وقتی کاربری وارد سیستم گردید نام کاربری را در آن جدول درج میکنم و وقتی که کاربر از سیستم به طور عادی خارج گردید رکورد متناظرش را حذف می کنم ولی وقتی برنامه دچار bug شد و به طور ناخواسته از برنامه خارج شد و یا حتی کامپیوتر reset شد و یا کاربر از طریق task manager برنامه را بست رکورد کاربر در جدول باقی می ماند که باید به طور دستی آن رکورد را حذف کنم تا کاربر مورد نظر بتواند وارد سیستم شود
    در واقع مشکل من این است که اگر کاربر به طور غیر معمول از برنامه خارج شد این را بفهم و رکود متناظرش را حذف کنم

  2. #2
    کاربر دائمی آواتار ali_kolahdoozan
    تاریخ عضویت
    بهمن 1384
    محل زندگی
    اون سر دنیا
    پست
    1,631
    ایراد رو باهات مخالفم چون باید با try cash مدیریتش کنی .

  3. #3
    یک روش اینست که در زمان ورود کاربر ابتدا یک Select بصورت زیر بزنید:
    Select UserId From OnlineUsers with(nolock) where UserId='کد کاربر'

    اگر رکوردی برگردانده شد که به کاربر اجازه ورود به سیستم را نمیدهید.
    اگر رکوردی برگردانده نشد پس از آغاز نمودن Transaction کد کاربر را در جدول کاربران آنلاین Insert نموده و بدون Commit نمودن Transaction به کاربر اجازه ورود به سیستم را میدهید.
    حالا اگر کاربر بخواهد بصورت عادی از سیستم خارج شود قبل از خروج Transaction را RollBack نمائید که در این حالت رکوردی که Insert نموده بودید از جدول حذف خواهد شد و در ورود بعدی مشکلی بوجود نخواهد آمد.
    زمانیکه خروج و یا Disconnect غیرعادی اتفاق بیافتد چون Transaction هنوز Commit نشده است عملیات RollBack بطور خودکار انجام خواهد شد.
    البته این روش ایرادات خاص خود را دارد!

  4. #4
    کاربر دائمی آواتار MH2538
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    No Man Land
    پست
    537
    سلام
    برای پوشش دادن حالت هایی نظیر همونهایی که خودت گفتی (خروج غیر قابل پیش بینی برنامه)
    می تونی یه تابع به توابعت اضافه کنی روش کار هم ایتنطور باشه :
    1- هر کاربری که کانکت می شه رو به Table اضافه کنی (همون روش خودت)
    2- یک Deadline برای هر تماس در نظر بگیری .مثلا هر کاربر یک ساعت می تونه وصل باشه اما بعد از یک اتصال اون رو قطع نکنی بلکه با یه تابع(همون تابعی که گفتم باید اضافه کنی) چک کنی اگر کاربر هنوز وصل بود Deadline اون رو تمدید کنی و در غیر اینصورت رکورد مربوط به اون رو از جدول کاربرهای فعال حذف کنی.
    البته این کار مقداری سربار برای شبکه و سیستم مرکزی ایجاد می کنه
    3- می تونی برنامه سمت سرور رو بصورت WebApplication بنویسی و اون رو روی IIS اجرا کنی و با استفاده از Session فعال بودن کاربر های رو کنترل کنی. که در این صورت باید WebService و یا Net Remoting. بلد باشی

  5. #5
    کاربر دائمی
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    پست
    133
    سلام با تشکر از نظرات دوستان ولی مسئله ای که اینجا مهم است اینکه در هر دو روش گفته شده برای بیش از 100client فکر کنم جواب نمی دهد سربار زیادی روی شبکه و sql server ایجاد می کند من فکر کنم راههای بهتر از این هم وجود دارد

  6. #6
    کاربر دائمی آواتار MH2538
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    No Man Land
    پست
    537
    سلام
    دوست عزیز
    در روشی که خدمتتون گفته بودم یه روش مبتنی برIIS بود.
    این روش هیچ سرباری روی شبکه ایجاد نمی کنه بلکه از مدیریت Session بهره می گیرد .ضمن اینکه امنیت رو هم همراه خودش داره.
    Session هم که کاربردهاش به همه ثابت شده.

  7. #7
    کاربر دائمی
    تاریخ عضویت
    فروردین 1384
    محل زندگی
    تهران
    پست
    133
    دوست گرامی برنامه به صورت win application می باشد پیشنهاد شما برای سیستم های web application کاربرد دارد که من با استفاده از session عمل جلوگیری را انجام بدهم

  8. #8
    کاربر دائمی آواتار MH2538
    تاریخ عضویت
    بهمن 1381
    محل زندگی
    No Man Land
    پست
    537
    سلام
    دوست عزیز قصد اصرار و پافشاری روی روشی که خدمتتون گفتم ندارم ، اما شما با استفاده از remoting یا با استفاده از webservice می تونید برنامه ای بنویسید که سمت سرور از نوع web application و سمت کلاینت از نوع win application باشد.
    نیازی نیست که هر دو سمت win base یا web base باشند.

  9. #9
    کاربر دائمی آواتار Sorenaa_s
    تاریخ عضویت
    اردیبهشت 1386
    سن
    43
    پست
    115
    شما می تونید کنترل کنید که روی هر workstation به طور همزمان فقط یک نسخه از نرم افزار شما اجرا بشه. از طرفی زمان login کاربر چک کنید که اگر از قبل رکوردی مربوط به این کاربر با همان hostname وجود دارد، اجازه ورود بدید جون حتما بار آخر به مشکلی برخورد کرده بوده که رکورد باقی مونده. این راه تا حد خیلی زیادی مشکل رو حل می کنه.

  10. #10
    اگر نرم افزار شما تحت شبکه است
    بهترین راه برای کنترل این که کاربران online هستند و صدور مجوز login استفاده از یک server application است. server application را روی سرور نصب کن. بعد هر کلاینتی که بخواهد login کند توی user های سرور اضافه می شود. برای ارتباط بین کلاینت ها و سرور باید از windows socket استفاده کنی و از پروتکل TCP/IP. هیچ نیازی به ذخیره کردن user ها در DB نیست. در server application هم user ها در memory ذخیره می شوند. حالا هر وقت که ارتباط یک کلاینت با سرور قطع شد(چه از طریق logout چه از طریق error و exception) سوکت بین کلاینت و سرور هم disconnect می شود. و سرور آنرا از لیست user ها در می آورد.

    اگر اطلاعات بیشتری می خواهی mail بزن

  11. #11
    کاربر دائمی آواتار hasan_esfahan
    تاریخ عضویت
    بهمن 1386
    محل زندگی
    اصفهان
    پست
    419
    میتوانید زمانی که برنامه لود می شود جدول تون را خالی کنید و سپس عملیات دیگر را انجام دهید

    ali_karimi68

    خدایا فرج آقا نزدیک بفرما

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •