PDA

View Full Version : سوال: محدود کردن Login (امکان Login کردن با یک Account به طور هم زمان در بیشتر از یک جا وجود نداشته باشد)



FaridAghili
سه شنبه 13 فروردین 1392, 21:52 عصر
سلام دوستان، شب همگی بخیر.
این اولین تاپیک، اولین پست و اولین سوال من در Barnamenevis.org هست.

همونطور که از عنوان تاپیک تا حدودی پیداست، سعی بر این دارم تا Login سایت رو به نوعی محدود کنم که وقتی کابر با حساب کاربریش وارد سایت می شه، تا زمانی که Log Out نکرده هیچ جای دیگه (حتی رو همون سیستم) امکان Login کردن با اون Account وجود نداشته باشه.
نکته ای که باید توجه داشته باشید اینه که وقتی کاربر سایت رو به هر شکلی ترک کرد (بستن Browser، بستن Tab، کلیک رو لینکی جهت انتقال به صفحه ای خارج از سایت و ...) عملا Log Out انجام شه.

چیزی که من اینجا دنبالش هستم ایده و پشنهاد شما دوستان جهت تحقق این امر هست، ممنون می شم که نظرات و راه کار هایی که به ذهنتون می رسه رو بدونم.
توجه داشته باشید محدودیتی در استفاده از PHP، MySql، JavaScript و یا هر چیز دیگه ای که لازم هست وجود نداره.

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

khanlo.javid
سه شنبه 13 فروردین 1392, 22:18 عصر
دوست عزیز محدودیتی لازم نیست برای کاربرتون اعمال کنید شما وقتی از session استفاده کنید فقط یک کاربر میتونه به طور همزمان از Account خودش استفاده کنه .




موفق باشید.

FaridAghili
سه شنبه 13 فروردین 1392, 23:22 عصر
ضمن تشکر، اجازه بدید کمی بیشتر توضیح بدم.

این سیستم Login که داریم راجع بهش صحبت می کنیم، در واقع Login یک وبسایت نیست. در یکی از نرم افزار هام، به دلیل تجاری بودنش کاربر برای ورود به نرم افزار و استفاده از اون نیاز به یک Account داره که شامل Username و Password می شه.
در محیط نرم افزار، پس از وارد کردن Username و Password و کلیک بر روی Login، اطلاعات ورودی که شامل Username و Password (به صورت MD5) می شه با استفاده از متود GET به لینک مورد نظر ارسال می شه که در واقع یک اسکریپت PHP هست. در اون اسکریپت Username و Password با Database مطابقت داده شده و عبارت مطلوب توسط echo به صورت خروجی توسط نرم افزار خونده می شه، لازم به گفتن نیست که نرم افزار این خروجی رو دریافت کرده و اقدامات بعدی رو انجام می ده (در صورت معتبر بودن وارد محیط اصلی نرم افزار شده، و یا در صورت عدم اعتبار...).
هدف بنده اینه که وقتی کاربر با حساب کاربریش وارد نرم افزار شده، تا زمانی که نرم افزار در حال اجرا هست، امکان Login با اون حساب کاربری در هیچ جای دیگه وجود نداشته باشه.

با توجه به این توضیحات، اگه نظر دیگه ای دارید خوشحال می شم؛ ممنون.
فرید

FaridAghili
چهارشنبه 14 فروردین 1392, 19:45 عصر
مهندسین عزیز، راهی به ذهن کسی نمی رسه؟
فقط ایده هاتون رو می خوام.

فرید

dr.undead
چهارشنبه 14 فروردین 1392, 22:02 عصر
زیاد مطمئن نیستم فقط میتونه یه ایده باشه
ولی فک کنم بشه توی یه تیبل یه ستون بزاری که کاربر وارد شد ، توش عدد 1 بزاره
حالا یه تیکه برنامه بنویسی که برای هر لوگین اونجارو چک کنه اگه 0 بود وارد شه اگه 1 بود وارد نشه

FaridAghili
چهارشنبه 14 فروردین 1392, 22:14 عصر
ممنونم دوست من.
ایده شما کاملا مناسب و کاربردی هست، اگه بخوام نظر شما رو توضیح بدم به این صورت می گم:
وقتی کاربر با حساب کاربریش سعی در ورود به نرم افزار می کنه، Username و Password چک می شن، اگه معتبر بودن اون تیبل که فرمودید چک می شه و در صورتی که 0 بود، یعنی این Account جایی آنلاین نبود، ابتدا اون مقدار از 0 به 1 تغییر می کنه و سپس وارد برنامه می شه.
ضمنا هنگام خروج از برنامه، برنامه اون مقدار 1 توی تیبل رو به 0 تغییر می ده و برنامه بسته می شه.
به این صورت تا زمانی که اکانتی در حال استفاده هست امکان استفاده از اون وجود نداره.

همه چی کاملا خوب پیش می ره تا زمانی که...
برنامه موفق به تغییر مقدار توی تیبل از 1 به 0 (هنگام خروج نشه). برای مثال برنامه به هر دلیلی هنگ کنه و کاربر مجبور بشه اون رو از Task Manager ببنده و Terminate کنه، تو این حالت کد هایی که قرار بود زمان بسته شدن برنامه اجرا شه اجرا نمی شه.
یا وقتی برنامه در حالت اجرا هست، کامپیوتر Reset شه یا اصلا برق بره!!! یا کاربر بعد از ورود به برنامه اینترنتش قطع شه.
تو تمام این حالت ها و حالات مشابه امکان تغییر مقدار توی تیبل از 1 به 0 توسط برنامه وجود نداره و مسلما کاربر دیگه نمی تونه وارد اکانش شه.

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

dr.undead
چهارشنبه 14 فروردین 1392, 22:30 عصر
شما از قفل سخت افزاری یا همون دانگل استفاده نمیکنید ؟ اگه ازین بتونید استفاده کنید که کارت آسون و ساده میشه اما اگه نه...
میتونید از یه تیکه برنامه استفاده کنید ، بین کاربر و برنامه یه چیزو چک کنه
اگه اون چیزی که چک میکنه جوابش Ok بود به محتویات ستون تیبل دست نزنه اما اگه ok نبود 0 کنه
حالا اون چیزی که میخواد چک کنه بستگی به برنامه داره که یه چیز اساسی متناسب با برنامرو چک کنه

FaridAghili
چهارشنبه 14 فروردین 1392, 22:51 عصر
شما از قفل سخت افزاری یا همون دانگل استفاده نمیکنید ؟ اگه ازین بتونید استفاده کنید که کارت آسون و ساده میشه اما اگه نه...
خیر، برنامه با چک کردن Username و Password ی که پس از خرید به کاربر داده می شه کار می کنه که این اصطلاحا Account تو دیتابیس و در هاست من ذخیره شده و از نظر زمانی هم دارای محدودیت هست (برای مثال اکانت می تونه 1 ماهه، 2 ماهه و 3 ماهه باشه).


میتونید از یه تیکه برنامه استفاده کنید ، بین کاربر و برنامه یه چیزو چک کنه
اگه اون چیزی که چک میکنه جوابش Ok بود به محتویات ستون تیبل دست نزنه اما اگه ok نبود 0 کنه
حالا اون چیزی که میخواد چک کنه بستگی به برنامه داره که یه چیز اساسی متناسب با برنامرو چک کنه
درست متوجه نشدم می شه لطفا کمی واضح تر توضیح بدید؟ چه چیزی رو بین این 2 چک کنم؟

فرید

dr.undead
چهارشنبه 14 فروردین 1392, 23:09 عصر
ببین دوست من
من از جرئیات برنامت خبر ندارم اما در کل درست مثل برخی از ISP ها ، که کاربرشون برقشون میره ، یا سیستمشون ریست میشه تا چن دقیقه کاربر نمیتونه conect شه
شما میتونی از برنامه مثلا هر 10 مین یه بار به سیستم کاربر یه پارامتر بفرستی که اگه جواب دریافت کرد (که یا on هست یا off ) ، بسته به اون جوابی که میاره میتونه 0/1 تنظیم کنه

dr.undead
چهارشنبه 14 فروردین 1392, 23:24 عصر
از الگوریتم screen saver هم میتونی استفاده کنی یا میتونه یه ایده باشه

رضا قربانی
پنج شنبه 15 فروردین 1392, 10:55 صبح
سلام فرید جان
اول اینکه این تاپیک رو به قسمت php منتقل کن تا خیلی سریع به جوابت برسی

دوم اینکه بریم روی پروژه شما : اگر از سشن استفاده کنید با بستن مرورگر سشن از بین میره منتها این عملی که شما می خواهید اینه که وقتی مرورگر رو بست یه اطلاعاتی در بانک ذخیره بشه و در اینجا این فکر به سرم میرسه (دیدی بعضی از سایتها وقتی می خواهی خارج شی و سایت رو می بندی یه دستور جاوا اسکریپت اجرا می کنن مثلا می گن به امید دیدار . خب شما می تونی اون دستور رو بنویسی و یک conf از نوع yes no بذاری وقتی yes رو زد یکی از فانکشن های دست نویس php رو اجرا کنه و سایت رو ببنده)

سوم اینکه :
ببینید یه امکانی هاست داره به اسم کرون جاب که وظیفه این آقا اینه که به جای کاربر واقعی صفحه سایتت رو نمایش میده (یعنی نمایش یکی از صفحات سایت در صورتی که هیچ کاربری وجود نداره)

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

چهارم : البته جدا از کرون جاب با برنامه نویسی CURL هم می تونی . باید این دو سه تا چیزی رو که گفتم یاد بگیری در غیر این صورت امکانش نیست که بتونی این پروژه رو درست انجام بدی.
موفق باشید

FaridAghili
پنج شنبه 15 فروردین 1392, 12:16 عصر
ببین دوست من
من از جرئیات برنامت خبر ندارم اما در کل درست مثل برخی از ISP ها ، که کاربرشون برقشون میره ، یا سیستمشون ریست میشه تا چن دقیقه کاربر نمیتونه conect شه
شما میتونی از برنامه مثلا هر 10 مین یه بار به سیستم کاربر یه پارامتر بفرستی که اگه جواب دریافت کرد (که یا on هست یا off ) ، بسته به اون جوابی که میاره میتونه 0/1 تنظیم کنه
خب، درسته، یه سری راه هایی داره به ذهنم می رسه که البته نقطه ضعف های خودشو داره، با این حال شروع به پیاده سازی ایده شما می کنم و اگه مشکلی بود همین جا نظرتون رو می پرسم.
ممنون از تایمی که گذاشتید.


از الگوریتم screen saver هم میتونی استفاده کنی یا میتونه یه ایده باشه
متوجه منظورتون نشدم.

سپاس، فرید

FaridAghili
پنج شنبه 15 فروردین 1392, 12:25 عصر
سلام حاج رضا، مرسی، ممنون که رحمت کشیدی. ایشالا تو دانشگاه جبران کنم :دی

دارم روش های پیشنهادی شما رو بررسی می کنم.
استفاده از کد جاوا اسکریپت خیلی مطمئن به نظر نمی یاد چون همونطور که گفتم هدف کنترل شرایط پیش بینی نشده ای مثل قطع برق، ریست شدن سیستم و حتی قطع شدن اینترنت هست که در همچنین شرایطی نمی شه به جاواسکریپت یا هر عمل دیگه ای که Client-Side هست خیلی اعتماد کرد.

کرون جاب رو از اونجا که بار اولی هست که می شنوم هیچ اطلاعاتی ندارم، البته با تشکر از گوگل هنوز امیدی هست! اما خب، الان نظری راجع بهش ندارم.

در مورد cURL، من تا حالا فکر می کردم cURL تو PHP فقط برای Post کردن اطلاعات به Server دیگه هست! که الان اینطور که پیداست کارهای دیگه ای هم می تونه بکنه. دارم سعی می کنم سر در بیارم.

کلی مرسی که لطف کردی و وقت گذاشتی.

فرید

dr.undead
پنج شنبه 15 فروردین 1392, 15:02 عصر
الگوریتم screen saver ، به این صورت که کاربر AFK شد صفحه مدل خاص خودشه نشون میده
شماام میتونی همین حالتو تو برنامه بزاری اگه 10 مین موس و کیبورد دست نخورد ، برنامه تا همونجا هرچی هست سیو کنه و اون ستون خاص به 0 تبدیل بشه و اگه کاربر خاص با برنامه دوباره کار کنه باس لوگین کنه و ادامه ماجرا...

FaridAghili
پنج شنبه 15 فروردین 1392, 15:15 عصر
بسیار خب، کاملا واضح و قابل اجرا هست اما مشکلاتی که قبلا گفته شده همچنان وجود داره و راه حلی برای کنترل وضعیت های پیش بینی نشده ای مثل قطع برق دیده نمی شه.
با این حال ممنون بابت توضیحتون، ترجیح می دم از پست شماره 9 استفاده کنم.

فرید.

dr.undead
پنج شنبه 15 فروردین 1392, 21:57 عصر
بسیار خوب
فقط یادت باشه زمان time out نه کم در نظر بگیز نه زیاد

FaridAghili
جمعه 16 فروردین 1392, 17:13 عصر
با تشکر از همگی، مخصوصا دوست عزیز dr.undead، کار برنامه تموم شد و تو مرجله تست نهایی قرار داره.
ممنون از وقتی که گذاشتید.

سپاس، فرید.