PDA

View Full Version : سوال: از بین رفتن وضعیت لاگین بعد از بسته شدن تصادفی بروزر



mehrdad201
دوشنبه 23 آذر 1388, 21:18 عصر
سلام خدمت همه دوستان

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

بعضی از سایتها که لاگین میکنیم داخلشون، اگه به هر دلیلی بروزر بسته بشه (بدون لاگ اوت کردن ) و بعد دوباره بروزر رو باز کنیم و ادرس یو ار ال رو در ادرس بار بزنیم میبینیم که وضعیت لاگ این محفوظ شده و کاربر رو به عنوان لاگین شده در نظر گرفته.

اما من در پروژم وقتی لاگین میکنم بعد بروزر رو میبندم و دوباره بروزر جدید باز میکنم و ادرس سایت رو میزنم میبینم که دوباره از من میخواد که لاگین کنم.

کسی میدونه چطوری میشه این مشکل رو برطرف کرد؟
ایا نیاز به کد نویسی داره یا با تنظیم در وب کانفیگ قابل حل هست.

خواهش میکنم هر کسی میدونه کمکم کنه.

با تشکر و سپاسگذاری.

Chabok
دوشنبه 23 آذر 1388, 21:36 عصر
اون وب سایت هایی که وضعیت لاگین بودن شما رو حفظ میکنند یک سری اطلاعات مبنی بر هویت کاربری شما رو بصورت Cookie روی سیستم شما ذخیره میکنند و هنگام ورود مجدد ، در صورت وجود کوکی مورد نظر ، عملیات ورود شما را انجام میدهند .

ولی در حالت عادی اطلاعات لاگین از بین خواهد رفت .
چون اصولاً این اطلاعات توسط Session نگهداری می شوند و Session نیز بر اساس یک Cookie که حاوی SessionID جاری است عمل می کند .
و در صورت تعویض پنجره مرورگر SessionID شما تغییر می کند و در نتیجه لاگین نیستید .

در مورد Session و Cookie جستجو کنید .

mehrdad201
دوشنبه 23 آذر 1388, 21:47 عصر
از اونجاییکه سیستم رو به صورتی دارم طراحی میکنم که از مالتیپل لاگین جلوگیری کنه (منظور لاگین چند باره و همزمان با یک نام کاربری هست) موقع لاگین و لاگ اوت یه سری کار انجام میدم.

وقتی یوزر لاگین میکنه اطلاعاتی ثبت میشه که این یوزور لاگین کرده. زمان لاگ اوت یا سشن تایم اوت هم این اطلاعات پاک میشه.

بنابراین وقتی یوزر بخواد لاگین کنه در حالیکه اطلاعات ثبت شده در موردش وجود داره (به این معنی که این یوزر قبلا لاگین شده) جلوش گرفته میشه

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

حالا به نظر شما من بیام از کوکی ها استفاده کنم یا اینکه در ایونت کلوز بروزر (که البته کلاینت ساید هست و باید براش کد نوشت تا بشه در حالت سرور ساید هم هندلش کرد) اون اطلاعات رو پاک کنم؟

ببخشید اگه پیچیده صحبت کردم. (البته شما استاد بنده هستید)

Chabok
دوشنبه 23 آذر 1388, 22:21 عصر
در مورد استفاده از رویداد سمت کلاینت بسته شدن مرورگر زیاد مطمئن نیستم که اجازه اجرای کامل کد را میدهد یا خیر .

شاید سایر دوستان راه حل بهتری داشته باشند .

یکمی این وضعیت نگهداری اطلاعات لاگین کاربران نامتعارف است .
و مشکل نیز ناشی از همین عدم اطلاع از باز بودن پنجره مرورگر کاربر و همچنین بسته شدن آن است .

و در واقع تمرکز صورت مسئله روی اون زمانی است که اطلاعات لاگین کاربر موجود است .
ولی پنجره بسته شده و Session کاربر معتبر نیست .

این راه حل بنظرم میرسد :
هنگام ورود کاربر یک کوکی حاوی اطلاعات جهت تشخیص هویت با زمان انقضای Session در نظر بگیرید .
فرض میکنیم زمان معتبر بودن وضعیت لاگین 20 دقیقه است .
و کاربر در دقیقه دهم پنجره را می بندد .

اگر قبل از 10 دقیقه باقی مانده ، دیگر به صفحه ورود رجوع نکند که مشکلی نیست و زمان Session و نگهداری وضعیت لاگین بودن کاربر حذف می شود .

اگر در بین این زمان 10 دقیقه باقی مانده رجوع کرد و اطلاعات وارد شده جهت لاگین با اطلاعات یک کاربر لاگین شده برابر بود و یک کوکی شامل همان نام کاربری روی سیستم کاربر مجود بود :
می توان نتیجه گرفت که این بابا پشت در گیر کرده و اجازه ورود برای او صادر کنید .

اصلاحات :
اگر کاربر بصورت دستی Logout کرد این کوکی نیز حذف شود .

جدید : برای اطمینان از اینکه کاربر دیگری این کوکی را ندارد ، یک مقدار استرینگ رندوم مثلاً d2Gf354 هنگام لاگین کاربر تولید کنید و یک نسخه در کوکی مزبور بزارید و یک نسخه در اطلاعات لاگین کاربر روی سرور .
و زمانی که می خواهید از این کوکی برای متوجه شدن پشت در گیر کردن کاربر استفاده کنید این نکته را چک کنید .

باگ :
فکر میکنم این روش یک باگ تابلو داشته باشد و به درد نخوره :لبخند:
روی حالتی که یک کاربر دیگه هم با همین مشخصات سعی در ورود داشته باشد فکر کنید .

منتظر نظرات سایر دوستان باشید .


البته شما استاد بنده هستیدما هنوز خودمون شاگرد شوفریم :لبخند: