سطح B: مدیریت و پایان دادن به سشن
ورود به سیستم عالی است، اما اگر کاربر نتواند خارج شود (Logout)، امنیت حسابش روی کامپیوترهای عمومی به خطر میافتد. در این سطح، چرخه حیات سشن را کامل میکنیم.
محتوای آموزشی
۱. حذف یک متغیر با unset()
گاهی میخواهیم فقط بخشی از اطلاعات سشن (مثلاً محتویات سبد خرید) را پاک کنیم اما کاربر همچنان لاگین بماند. برای این کار از unset() استفاده میکنیم:
unset($_SESSION['cart_items']); // فقط سبد خرید پاک شد
۲. نابودی کامل با session_destroy()
برای خروج کامل کاربر، باید کل کمد را خالی کنیم و کلیدش را دور بیاندازیم. این کار معمولاً در ۳ مرحله انجام میشود:
session_start(); // همیشه اول باید وصل بشیم تا بتونیم قطع کنیم!
// ۱. خالی کردن آرایه سشن
$_SESSION = [];
// ۲. نابود کردن سشن در سرور
session_destroy();
// ۳. هدایت کاربر به صفحه اصلی یا لاگین
header("Location: login.php");
exit();
پروژه نهایی گام ۶: سیستم لاگین امن کامل
این تمرین، جمعبندی تمام چیزهایی است که از گام ۱ تا ۶ یاد گرفتهاید. شما باید ۳ فایل بسازید که با هم کار میکنند:
۱. صفحه ورود (login.php)
- یک فرم با فیلد
usernameوpassword. - دریافت اطلاعات با
$_POSTو اعتبارسنجی باtrimوempty. - چالش شرطی: اگر نام کاربری "admin" و رمز عبور "1234" بود:
- سشن را استارت بزن.
$_SESSION['user']را برابر "admin" قرار بده.- با
header()به صفحهpanel.phpهدایت کن.
- در غیر این صورت، پیام "نام کاربری یا رمز اشتباه است" چاپ کن.
۲. پنل مدیریت (panel.php)
- با
session_start()شروع کن. - نگهبان امنیتی: چک کن
!isset($_SESSION['user']). یعنی اگر متغیر سشن وجود نداشت (کاربر لاگین نکرده بود)، بلافاصله او را بهlogin.phpبرگردان (Redirect) وexit()کن. - اگر لاگین بود، پیام "سلام مدیر، خوش آمدی" را نمایش بده.
- یک لینک ساده HTML به صفحه
logout.phpقرار بده:<a href='logout.php'>خروج از حساب</a>
۳. فایل خروج (logout.php)
- سشن را استارت بزن.
- سشن را نابود کن (
session_destroy). - کاربر را به
login.phpبرگردان و پیامی در URL بفرست (مثلاًlogin.php?logout=1) که در صفحه لاگین بتوانیم پیام "شما با موفقیت خارج شدید" را نمایش دهیم.
باشگاه ذهن: دزدیدن سشن (Session Hijacking)
چالش هوش مصنوعی: سشنها امن هستند، اما اگر کسی "Session ID" شما را بدزدد چه؟ (مثل اینکه کلید کمد شما را بدزدد). به این کار Session Hijacking میگویند.
وظیفه: یک پرامپت برای هوش مصنوعی بنویسید و بپرسید:
- Session ID دقیقاً کجا ذخیره میشود؟ (در کوکی مرورگر).
- چطور تابع
session_regenerate_id(true)میتواند جلوی دزدیده شدن سشن را (مخصوصاً بعد از لاگین کردن) بگیرد؟ - از او بخواهید کد
login.phpتمرین بالا را طوری اصلاح کند که بلافاصله بعد از چک کردن رمز عبور صحیح، این تابع را صدا بزند تا امنیت بالا برود.