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

نام تاپیک: يوزرها را محدود به يك بار ورود در يك زمان كنيم

  1. #1
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    Question يوزرها را محدود به يك بار ورود در يك زمان كنيم

    با سلام

    من يه مشكل در ASP كلاسيك دارم به اين ترتيب :
    يه سايت طراحي شده كه براي وارد شدن به بخش ادمين يوزرهاي مختلفي داره . هر يوزر كه وارد ميشه يه Session ايجاد ميكه كه اعتبار يوزر در صفحات مختلف با اون شناسايي ميشه . اگر همان يوزر از كامپيوتر ديگه اي وارد بشه دوباره سيستم اجازه ورود ميده . چكار كنم كه يوزر فقط با يه كامپيوتر بتونه وارد بشه و تا وقتي كه از سيستم خارج نشده يوزر ديگه اي با همان مشخصات نتونه وارد بشه .

  2. #2
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز شما می توانید در رکورد مربوط به هر کاربر (User) خود در بانک اطلاعاتی، فیلدی داشته باشید (مثلا از نوع بولین با نام login) که هنگام ورود با آن مشخصات کاربری، علاوه بر چک کردن نام کاربری و رمز، مقدار این فیلد هم بررسی شود که اگر Trueبود یعنی در حال حاضر با این مشخصات لاگینی صورت گرفته و اجازه ورود مجدد داده نشود... هنگام logout مقدار آن فیلد را false کنید تا برای ورود های بعدی مشکلی پیش نیاید... موفق باشی

  3. #3
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    نقل قول نوشته شده توسط kashaneh مشاهده تاپیک
    دوست عزیز شما می توانید در رکورد مربوط به هر کاربر (User) خود در بانک اطلاعاتی، فیلدی داشته باشید (مثلا از نوع بولین با نام login) که هنگام ورود با آن مشخصات کاربری، علاوه بر چک کردن نام کاربری و رمز، مقدار این فیلد هم بررسی شود که اگر Trueبود یعنی در حال حاضر با این مشخصات لاگینی صورت گرفته و اجازه ورود مجدد داده نشود... هنگام logout مقدار آن فیلد را false کنید تا برای ورود های بعدی مشکلی پیش نیاید... موفق باشی
    با تشکر از پاسخ شما

    در این صورت دو مشکلی پیش می آید :
    1- اگر یوزر بدون logout کردن خارج شود آن موقع دیگر امکان ورود ندارد .
    2- اگر زمان Session به اتمام برسد بازهم یوزر امکام ورود ندارد .

    من فکر می کنم باید از متد Application در فایل Global.asa استفاده کنیم ولی طریقه استفاده رو نمی دونم .

  4. #4
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز راه حل این مشکل هم آسان است... شما کافی است در فایل Global.asa خود در هنگام رخ دادن متد Session_OnEnd یعنی اتمام یکی از Session ها، چک کنید که اگر مقدار این Session مربوط به لاگین همچنان True است، اولا مقدار فیلد مربوط به آنرا در بانک اطلاعاتی False کنید و ثانیا کل محتوای آن Session را با Abandon حذف کنید (گرچه به طور اتوماتیک وار عمل دوم اجرا خواهد شد)... موفق باشی

  5. #5
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    با تشکر

    آقا مثالی در این مورد میتونی به من معرفی کنی که ببینم چطور اینو اجراییش کرده ؟
    ببین من به Session دارم به نام UserName که یوزرها رو بعد از وارد شدن در UserName قرار میدم .
    وقتی که یوزر وارد میشه درون بانک یه فیلدی که مربوط یه ON یا OFF یوزرهاست رو ON یا True می کنه . چطوری اینو داخل برنامه چک کنم که اجازه ورود به یوزرها رو برای بار دوم نده و بدون Logout کردن هم اتومات زیربرنامه مورد نظر از فایل Global اجرا بشه تا فیلد مربوطه رو False کنه ؟


    من مشکلم همینه که نمی تونم این قسمت رو بنویسم .

  6. #6
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    Smile نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز برای مثال فرض کنید نام فیلد شما Islogin باشد... حال کاربر قصد لاگین دارد... او نام کاربری و رمز عبور را وارد می کند... شما علاوه بر چک کردن هر دو این مقادیر، باید مقدار مربوط به فیلد Islogin هم چک کنید تا ببینید کسی با این نام کاربری الان وارد شده یا خیر؟ پس کوئری شما از بانک اطلاعاتی چیزی شبیه این می شود:

    Select * From TblUSERS Where UserName=My User Name And Password=My Password And Islogin=False
    مقدار False در کوئری فوق چک می کند آیا کاربر مورد نظر لاگین کرده یا خیر (False یعنی خیر)... پس از لاگین هم باید مقدار این فیلد را True کنید تا دیگر با این نام کاربری کسی مجدد نتواند وارد شود تا هنگام خروج وی یا اتمام مدت زمان اعتبار Session آن کاربر...


    در مورد خروج کاربر یا اتمام Session آن هم در فایلی با نام global.asa در هنگام رویداد Session_OnEnd باید مجدد به بانک اطلاعاتی متصل شوید و مقدار فیلد Islogin که الان با ورود کاربر True شده را به False تغییر دهیم... تقریبا به اینصورت (کد نویسی مفصل تر به عهده خود شما) :


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Session_OnEnd
    ......
    Change Value Of Field Islogin To False For Youe Username In DataBase
    ......
    End Sub
    </SCRIPT>

    موفق باشی
    آخرین ویرایش به وسیله kashaneh : چهارشنبه 09 اردیبهشت 1388 در 20:05 عصر دلیل: اصلاح کد ها

  7. #7
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    با تشکر از پاسخ شما


    این طوری عمل کنم درست میشه ؟


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Session_OnEnd
    Select * From TblUSERS Where UserName=Session("My_User_Name")
    Set rs = Server.CreateObject("ADODB.Recordset")
    rs.CursorLocation = 2
    rs.Open sSql, conn, 1, 2

    rs("Islogin") = True

    rs.Close
    Set rs = Nothing
    End Sub
    </SCRIPT>

  8. #8
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز مقدار Islogin را باید False کنید نه True!!

    کاری که باید انجام دهید تقریبا معادل همین کدی است که نوشتید... من به صورت شبه کد نوشتم اما حتما می دانید که در هنگام پیاده سازی، باید ریزه کاریها و دستور زبان را به دقت رعایت کنید... مثلا شما بعد از اینکه مقدار فیلد را false کردید، از دستور rs.UPDATE استفاده نکرده اید و این یعنی خطا در انجام کار!!!... با کمی دقت حتما موفق خواهید شد... موفق باشی

  9. #9
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    ممنون عزیزم

    آره فرمایش شما کاملاً دسته من اینو به صورت ناقص گزاشتم . البته که باید کدهای ذخیره سازی در دیتابیس کامل باشه تا برنامه عمل کنه .

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

  10. #10
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    نقل قول نوشته شده توسط kashaneh مشاهده تاپیک
    دوست عزیز برای مثال فرض کنید نام فیلد شما Islogin باشد... حال کاربر قصد لاگین دارد... او نام کاربری و رمز عبور را وارد می کند... شما علاوه بر چک کردن هر دو این مقادیر، باید مقدار مربوط به فیلد Islogin هم چک کنید تا ببینید کسی با این نام کاربری الان وارد شده یا خیر؟ پس کوئری شما از بانک اطلاعاتی چیزی شبیه این می شود:

    Select * From TblUSERS Where UserName=My User Name And Password=My Password And Islogin=False
    مقدار False در کوئری فوق چک می کند آیا کاربر مورد نظر لاگین کرده یا خیر (False یعنی خیر)... پس از لاگین هم باید مقدار این فیلد را True کنید تا دیگر با این نام کاربری کسی مجدد نتواند وارد شود تا هنگام خروج وی یا اتمام مدت زمان اعتبار Session آن کاربر...


    در مورد خروج کاربر یا اتمام Session آن هم در فایلی با نام global.asa در هنگام رویداد Session_OnEnd باید مجدد به بانک اطلاعاتی متصل شوید و مقدار فیلد Islogin که الان با ورود کاربر True شده را به False تغییر دهیم... تقریبا به اینصورت (کد نویسی مفصل تر به عهده خود شما) :


    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Session_OnEnd
    ......
    Change Value Of Field Islogin To False For Youe Username In DataBase
    ......
    End Sub
    </SCRIPT>

    موفق باشی
    با سالام
    من با این برنامه نتونستم کاربران Online رو شناسایی کنم .
    مشکل کار اینه که در فایل Global.asa مقدار Sesstion ی که در فایل ها به آن مقدار دادیم رو قبول نمی کنه . یعنی نمیشه متوجه شد که کدام کاربر در حال حاضر از سایت خارج شده که مقدار Islogin رو False کرد .
    آیا در فایل های ASP می شود به یک متغییر Application مقدار داد ؟ و آن را در فایل Global بازخانی و از آن استفاده کرد ؟

  11. #11
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز در مورد اینکه می توان از متغیر های Application استفاده کرد باید بگم بله می تواید اما باید از این متغیر ها حتی الامکان کم استفاده کرد...
    در مورد اینکه نمی توانید کاربران آنلاین را شناسایی کنید باید بگم بله اگر کسی مثلا دکمه خروج را نزند و از سایت برود در مدت کوتاهی (چون بعد از مدتی Session آن از بین می رود) تعداد کاربران آنلاین شما کمی زیادتر خواهد بود ولی بعد از انقضای Session او، دوباره تعداد صحیح خواهد شد... و به نظر من این قابل چشم پوشی است!! موفق باشی

  12. #12
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست من ،مشكل اينه كه چطوري session ي كه براي هر يوزر در Golobal ايجاد شده رو تشخيص بدم.

    خيلي ساده بگم .
    سايت تعدادي كاربر معمولي بدون يوزر داره و تعدادي هم با يوزر و پس وارد ميشن . بعد از ورود زيربرنامه اي كاربر رو شناسايي ميكنه و مشخصات اونو از جمله نام - سطح دسترسي - نام كاربري و ... رو در چند Session ميريزه كه در تمام صفحات بتونيم ازش استفاده كنيم .
    خوب حالا شما بفرماييد كه چگونه مي توان مقداري كه به Session("UserName") اختصاص داده شده رو داخل Application("UserName") بريزيم . يعني مقدار هردو يكي بشوند .

    آقا اين برنامه اي كه براي شناسايي كاربران در Global دادي كار نمي كنه . امكان ارسال يه شناسه يا متغير به Global از داخل فايل ASP نيست . يا من نميدونم چطور ؟

  13. #13
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز چرا میگین امکان پذیر نیست!؟ هنگام اجرای یک روتین Session_OnEnd براحتی شما وقتی نام کاربری کاربران عضو خودتونو دارید می تونید فیلد مربوط به لاگین شدن وی را False کنید تا بعدا بتونه مجدد وارد بشه...
    کدی که من گذاشتم بله شبه کد هست و نباید هم اجرا بشه... کاربران غیر عضو شما هم که مطمئنا نام کاربری ندارند و اصلا نیازی به عملیات خاصی ندارید...
    لطفا اگر مشکلی هست اونو دقیقتر بگید... شاید هم برداشت من صحیح نباشه... به هر حال موفق باشی

  14. #14
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    آره فرمایش شما درسته . بزار اینطوری بگم :

    یوزر از طریق یه صفحه ASP وارد میشه . یوزر نیم اونو هم داریم Session("My_User_Name")
    . خوب حالا چطوری در روتین Session_OnEnd از این یوزرنیم استفاده کنیم که بتونیم فیلد مربوط به لاگین شدن رو False کنم ؟
    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    Sub Session_OnEnd
    ...............
    Select * From TblUSERS Where UserName=Session("My_User_Name")
    ...............
    End Sub
    </SCRIPT>


    Session("My_User_Name") رو نمیشناسه
    آخرین ویرایش به وسیله لوک خوش شانس : شنبه 06 تیر 1388 در 14:54 عصر

  15. #15
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز اگر از انجام همه چیز مطمئن هستید ولی بازهم نمی توانید مقدار متغیر از نوع Session را بخوانید، مطمئن شوید که فایل Global.asa شما در شاخه root قرار گرفته باشد (بالاترین سطح و در واقع اولین شاخه ای که توسط IIS به عنوان شاخه اصلی شناسایی می شود)...
    در ضمن مطالعه لینک زیر خالی از لطف نیست :

    http://www.w3schools.com/ASP/asp_globalasa.asp

    موفق باشی

  16. #16
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    ممنون از این که با حوصله جواب میدی کاشانه جان ....
    فایل Global در شاخه روت قرار داره ، چون من دارم ازش استفاده می کنم و تعداد کاربران Online روی سایت رو میشمرم .
    برنامه من اینه

    من Seesion ی که دارم IDیه کاربرانیه که با یوزر و پسورد وارد شدن .
    نمیدونم کجای کار میلنگه .
    البته این رو هم بگم که این زیر برنامه رو اگر در یه فایل مستقل اجرا کنم جواب میده


    Sub Session_OnEnd
    x_ID = Session("UserID")
    Set rsUserOn = Server.CreateObject("ADODB.Recordset")
    rsUserOn.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("Menu/Main.mdb") & ";Jet OLEDB:Database Password=lks;"
    rsUserOn.Source = "SELECT * FROM TUsers where ID=" + Replace(x_ID, "'", "''") + ""
    rsUserOn.CursorLocation = 2
    rsUserOn.LockType = 2
    rsUserOn.Open()
    rsUserOn("TOnline") = False
    rsUserOn.Update
    rsUserOn.Close
    Set rsUserOn = Nothing


    End Sub

  17. #17
    کاربر دائمی آواتار kashaneh
    تاریخ عضویت
    آبان 1383
    محل زندگی
    در همین نزدیکی
    پست
    537

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    دوست عزیز برای خود منم یک سوال اساسی پیش اومده... شما یک امتحانی انجام بده... سعی کن ID کاربران رو فعلا در یک جدولی در بانک اطلاعاتی ذخیره کنی و هیچ کار دیگه ای نکنی... منظورم اینه در هنگام انقراض یک Session، سعی کنید به جای False کردن فیلد کاربر، آن ID رو در جدولی ذخیره کنید...
    هدفم از این کار این است که تست شود آیا اصلا این مقادیر هنگام رخ دادن زمان انقراض Session، قابل دستیابی هستند یا خیر... اگر شما دیدی مقادیری در جدول شما ذخیره می شود که خبر خوبی است!! اگر نه باید بگردید دنبال راه حلی دیگر برای مقصود خود...

    منتظر نتیجه آزمایش و تست شما هستم.... موفق باشی

  18. #18
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    ممنون

    امتحان می کنم و نتیجه رو اینجا میزارم

  19. #19
    کاربر دائمی آواتار لوک خوش شانس
    تاریخ عضویت
    فروردین 1385
    محل زندگی
    WINDOWS\Temp
    پست
    220

    نقل قول: يوزرها را محدود به يك بار ورود در يك زمان كنيم

    سلام

    آقا این کار کرد . فکر می کنم از ویندوزم بود مشکل از برنامه نبود .

    بهرحال ممنون عزیز

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

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