سطح 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 می‌گویند.

وظیفه: یک پرامپت برای هوش مصنوعی بنویسید و بپرسید:

  1. Session ID دقیقاً کجا ذخیره می‌شود؟ (در کوکی مرورگر).
  2. چطور تابع session_regenerate_id(true) می‌تواند جلوی دزدیده شدن سشن را (مخصوصاً بعد از لاگین کردن) بگیرد؟
  3. از او بخواهید کد login.php تمرین بالا را طوری اصلاح کند که بلافاصله بعد از چک کردن رمز عبور صحیح، این تابع را صدا بزند تا امنیت بالا برود.