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

پرسیده شده
فعالیت 1201 روز پیش
دیده شده 742 بار
1

باسلام خدمت استاد گرامی

من چندتا سوال در این مورد داشتم:

1- برای اینکه کاربر رو لاگین نگه داریم باید از کوکی ها استفاده کنیم؟

2- برای اینکه اطلاعات حساس کاربر سرقت نشه روشی که به ذهن من رسید این بود که یه جدول در پایگاه داده ایجاد کنیم که در اون دو ستون user_id و login_token باشه و به این صورت عمل کنه که بعد از هر بار لاگین یه رشته رندوم ایجاد کنه و اون رو در کوکی و در ستون پایگاه داده وارد کنه و به این شکل با مطابقت دادن ستون توکن و آی‌دی کاربر به اطلاعات اون دسترسی پیدا میکنیم، بعد از لاگ اوت هم کوکی و رکورد مربوطه در پایگاه داده حذف میشود. به نظر شما این روش درسته؟

3- لطفا اگر روش بهینه تر و بهتری برای این موضوع هست معرفی کنید.

 

باتشکر

فایل پیوست

محمد گازری
محمد گازری

16 دی 99

1
حذف شده

آقای گازری راه کار بهتر که استفاده میشه، استفاده از token هاست! حالا توکن چیه؟

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

یه جدول داخل دیتابیس ایجاد کنید که 4 تا فیلد داره به ترتیب، id - token - user_id - expires__at.

هر بار که کاربر لاگین میکنه یه token براش ایجاد کنید و آیدی کاربر، توکنی که براش ساخته شده و تاریخ انقضا اون کاربر رو توی این table که بهتون گفتم ذخیره سازی کنید. ضمنا توکن ساخته شده رو توی کوکی کاربر هم ذخیره کنید. حالا خیلی راحت هر موقع که لازم داشتید توکنی که توی کوکی ذخیره سازی کردید رو بردارید و یه کوئری به دیتابیس بزنید و user_id رو دریافت کنید و حالا با اطلاعات کاربر هرکاری دوست داشتید انجام بدید.

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

حالا چه جوری token ایجاد کنیم؟

$token= hash_hmac('sha256', 'some data', bin2hex(random_bytes(32));

درباره متد hash_hmac هم یه جستجو کنید و بیشتر باهاش آشنا بشید، این کد رو برای هر کاربر که لاگین میکنه اجرا کنید، الان متغیر token داخل کد حاوی توکن ساخته شدست و میتونید توی tableی که بهتون گفتم ذخیره سازی کنید.

 

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

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

23 دی 99

2
حذف شده

سلام و احترام

شما میتونید از Session برای زخیره سازی آیدی کاربر اقدام کنید که روش امن تری هست. در مورد توکنی هم که گفتید میتونید همچین کاری رو هم کنید حتی لازم نیست شما توکن رو توی دیتابیس ذخیره سازی کنید بلکه میتونید همون توکن رو توی session هم ذخیره کنید. 

میتونید از redis هم برای ذخیره سازی این token ها استفاده کنید که سرعت بیشتری داره و سبک تر هم هست. 

این موردی رو که اشاره کردید برای logged out بودن کاربر هم درسته شما میتویند اون token رو نابود کنید هنگامی که کاربر logout میکنه. 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

16 دی 99

0
حذف شده

باسلام مجدد

ممنون بابت پاسخی که دادید.

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

تنظیم زمان برای سشن ها هم بی فایده بود :

ini_set('session.cookie_lifetime','864000');
فایل پیوست

محمد گازری

توسط

محمد گازری

16 دی 99

حذف شده
پس از cookie استفاده کنید و آیدی کاربر رو ذخیره سازی کنید، این نکته رو هم در نظر داشته باشید که آیدی کاربر رو حتما هش کنید و به صورت خام درون کوکی قرار ندید
امیر صالحی

16 دی 99

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

20 دی 99

0
حذف شده

سلام مجدد

اگر آیدی اون کاربر رو هش کنم داخل کوکی چجوری میتونم اون هش به آیدی برگردونم و از اون طریق به اطلاعات پایگاه داده دسترسی پیدا کنم؟

فایل پیوست

محمد گازری

توسط

محمد گازری

21 دی 99

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

23 دی 99

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

23 دی 99

حذف شده
عذرخواهی میکنم بابت تاخیری که در پاسخ گویی پیش اومد چون برای بنده notification نیومده بود
امیر صالحی

23 دی 99

حذف شده
خواهش میکنم مشکلی نیست
محمد گازری

23 دی 99

0
حذف شده

خب اینطوری که باید آی دی همه کاربرا رو بگیرم و هش کنم و با هش مقایسه کنم. به نظرتون این کار درسته؟ 

اگر تعداد کاربرها بالا بره این کار منطقیه؟

فایل پیوست

محمد گازری

توسط

محمد گازری

23 دی 99

0
حذف شده

ن ببینید کد شما برای هر کاربر به صورت جدا اجرا میشه و چیزی قاطی نمیشه، خیلی از اپلیکیشن های هستند که کارای خیلی بیشتری با session ها و cookie برای هر کاربر انجام میدن. شما به وب سایت های بزرگ هم سر بزنید برای شما کلی cookie ٍثبت میشه. حالا اگه نرم افزار شما بزرگ شد شما راه کار های بهتری دارید. برای مثال میاید از Redis استفاده میکنید که مثلا session شما خیلی بهینه تر ذخیره بشه و بتونید مدیریتشون کنید. توی use case شما کار پیچیده ای نیست چون شما آیدی کاربر رو دریافت میکنید و هش میکنید و در نهایت توی کوکی ذخیره سازی میکنید. 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

23 دی 99

0
حذف شده

یه خورده به من وقت بدید تا ببیینم میتونم راه کار بهتری گیر بیارم

فایل پیوست

امیر صالحی

توسط

امیر صالحی

23 دی 99

0
حذف شده

سلام مجدد

خیلی ممنون از وقتی که گذاشتید ?

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

فایل پیوست

محمد گازری

توسط

محمد گازری

23 دی 99