شنبه یه خبراییه 🔥 منتظر شنبه باش 😉🥳
۰ ثانیه
۰ دقیقه
۰ ساعت
۶ محمدجوکار
مفهوم تابع \"isAliveToken\" رو متوجه نشدم
جامعه پی اچ پی ایجاد شده در ۱۶ دی ۱۴۰۱

باسلام

دوتا سوال داشتم.. سوال اولی:

در این کدهایی که هایلایت کردم، گفتیم اگر ولیدیشن‌های بالا اکی بود، بیا کاربر رو ثبت کن توی دیتابیس و همونجا هم گفتیم که اگر کاربر اطلاعاتش توی دیتابیس ثبت شد، بیا همون ایمیلشو بگیر و بریز توی سشن و مارو ببر به صفحه‌ی وریفای...

بعد پایینش گفتیم در صورتی که اکشن وریفای وجود داشت و سشن ایمیل هم بود، خب حالا چک کن ببین ایمیلی که توی سشن هست،‌ توی دیتابیس وجود داره یا نه؟؟؟ اگه نداشت، ارور بده.

.سوال من اینجاست که ما خودمون ایمیل رو از قبل ولیدیشن کردیم و میدونیم چیزی که در خط ۳۳ توی سشن ریختیم،‌یک ایمیل وریفای شده‌ست و حتما هم وجود داره.

یعنی مطمعنیم اگرتوی صفحه وریفای سشنی باشه، که هست، دیتای ایمیل کاربر هم توش هست، و ایمیله هم صحیحه. پس چرا دوباره میایم توی خط ۴۵ بااز هم چک میکنیم که آیا ایمیلی که توی سشنه، توی دیتابیس هستش یا نه؟؟؟

2ca7-Screenshot (570).png

سوال دوم:

در تصویر زیر، خط ۳۲ گفتیم اگر توی سشن از قبل هشی وجود نداشت، یا تابع isAliveToken فالس برگردونده بود، برو خط ۳۵ و یه توکن بساز و مقدار (هش) اون توکن رو بریز داخل سشن هش.

حالا که سشن هش اکی شد، کد برمیگرده به خط ۳۲ و اینبار، بخش اول کد که isset(session['hash']) هست، true میشه. وقتی این true بشه، سشن توی شرط بعد از and قرار میگیره و وارد تابع isAliveToken میشه.

44aa-Screenshot (569).png

وقتی سشن میاد اینجا،‌ میرسه به خط ۴۳ و وارد تابع findTokenByHash میشه. اونجا به هرحال داده هارو برمیگردونه و مجدد میاد وارد تابع isAliveToken میشه. من ادامشو نمیفهمم. خب میگه اگر داده‌ای وجود نداشت، ریترن کن فالس بعد خط بعدش (۴۶) چی میگه؟؟؟

36fc-Screenshot (568).png

سلام محمد جان

در مورد سوال اولت

۱. قسمت بالا که ولیدیت میشه در زمانی هست که کاربر درخواست اولش رو با post داده باشه! و قسمت دوم برای درخواست‌های get هست

۲. یادت باشه که ما همیشه باید فرض کنیم کاربرمون یه کاربر با رفتار عادی نیست و بهتره همیشه ولیدیشن‌های مورد نیاز رو روی داده انجام بدیم و مخصوصا در آموزش باید تمام این موارد رعایت بشه تا برای دانشجو جا بیوفته

در مورد سوال دومت جلسه بعد توضیح دادم

اما به صورت کلی در تابع اگر ما هزاران return هم داشته باشیم به اولین return که برسه اون مقدار رو بر میگردونه و از تابع حارح میشه

موفق باشید ?

محمد گازری ۱۶ دی ۱۴۰۱، ۰۷:۵۷

راستش جواب سوال اول رو متوجه نشدم

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

کاربر هم که نمیتونه سشن رو دستکاری کنه!! نمیدونم چرا نمیتونم درکش کنم. درست جا نمیافته برام


سوال دوم:

بله جلسه رو دیدم ولی نمیدونم خط ۴۶ داره چی میگه.. اصلا شما فکر کنین فالس نشه و وارد خط ۴۶ بشه.

اون بلایی که داره سر تاریخ و زمان میاره چیه؟؟؟؟



محمدجوکار ۱۶ دی ۱۴۰۱، ۰۸:۰۸

سشن روی برخی مرورگرها میمونه و درتر از بین میره یا با بسته شدن از دست نمیره (مثلا فایر فاکس با بستن مرورگر سشن رو از بین میبره ولی کروم دیرتر این کار رو میکنه)

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

فرض کن کاربر سشن رو داره اما در این بین ما یا ربات برناممون میاد و اون کاربر رو یا بلاک یا حذف میکنه، مثل کاری که الان برای تجریم روی کاربران ایرانی اتفاق میوفته

این یه سناریو ساده بود، فرض کن در طول برنامه هزاران rule دیگه هم هست و باعث میشه نیاز ما باشه تا ولیدیشن‌های لازم رو در جاهای مختلف برنامه داشته باشیم، شما باید در اینجا قدرت حل مسئله رو یاد بگیرید تا در پروژه واقعی و جای درست بتونید استفاده کنید

سوال دومت هم میگه اگر تاریخ انقضای توکن بزرگتر از ۲ دقیقه دیگه بود (زمان الان بعلاوه ۱۲۰ ثانیه) true برگردون در غیر این صورت false برگردون

محمد گازری ۱۶ دی ۱۴۰۱، ۰۸:۱۲

برای سوال اول:

آها پس اینطوری میشه. یعنی ما، وقتی سشن رو ارسال کردیم به صفحه وریفای،‌ مطمئن بودیم که توی دیتابیس، وجود داشته

اما حالا که توی صفحه وریفای داریم دریافتش میکنیم. باز هم باید تست کنیم ببینیم آیا سشن، هنوز هم توی دیبابیس هست؟؟ یعنی جوری نیست که توی این یکی دو دیقه یا کمتر، حذف شده باشه ولی هنوز سشنش فعال باشه!؟


سوال دوم:

یعنی مفهومش اینه که اگر هش، وجود داشت باید تاریخش انقضاشم بیشتر از دو دقیقه باشه؟؟ و اگر کمتر بود، فالس بده؟؟

میدونید کجا گیچ میشم؟ اونجا که توی دیتابیس هم تاریخ expired دادیم و گفتیم ده دیقه...

یعنی الان این برداشت رو کردم که میگه اگر از تاریخی که سشن تولید شده، کمتر از هشت دقیقه گذشته باشه، شسن میتونه برای کاربر عملا کار کنه

اگه بیشتر از هشت دقیقه گذشته بود، یک سشن دیگه از ابتدا ست بشه

محمدجوکار ۱۶ دی ۱۴۰۱، ۰۸:۳۱

کد تا ۱۰ دقیقه فعاله ولی اگر از ۸ دقیقه گذشته باشه یه کد دیگه براش ایجاد میشه

بهترین پاسخ
محمد گازری ۱۶ دی ۱۴۰۱، ۰۸:۳۲

ممنون از وقتی که گذاشتید. عمیق و عالی بود

محمدجوکار ۱۶ دی ۱۴۰۱، ۰۸:۴۸