سطح A: حافظه کوتاه‌مدت سرور

تا حالا فکر کردید وقتی در اینستاگرام لاگین می‌کنید، چطور وقتی صفحه را رفرش می‌کنید یا به پروفایل می‌روید، اینستاگرام هنوز می‌داند «شما، شما هستید»؟ راز کار در Session است.

محتوای آموزشی

۱. تابع حیاتی session_start()

برای استفاده از سشن، اولین خط کد PHP شما (دقیقاً بعد از <?php و قبل از هر نوع خروجی HTML یا حتی فاصله) باید این تابع باشد:

<?php
session_start(); // استارت موتور حافظه!
?>

این دستور به سرور می‌گوید: «اگر این کاربر قبلاً آمده، کمدش را باز کن. اگر نه، یک کمد جدید (یک Session ID جدید) برایش بساز.»

۲. سوپرگلوبال $_SESSION

بعد از استارت زدن، شما به یک آرایه انجمنی به نام $_SESSION دسترسی دارید. هر چیزی در این آرایه بنویسید، در حافظه سرور می‌ماند و در صفحات دیگر قابل خواندن است.

// ذخیره کردن (در صفحه login.php)
$_SESSION['username'] = "Ali_Rezaei";
$_SESSION['role'] = "Admin";

// خواندن (در صفحه profile.php)
echo "سلام " . $_SESSION['username']; // خروجی: سلام Ali_Rezaei

کارگاه عملی: سیستم لاگین (نیمه اول)

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

فایل ۱: login.php
<?php
session_start(); // ۱. بسم الله!

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // ۲. دریافت و اعتبارسنجی (مرور گام ۵)
    $user = trim($_POST['username']);
    
    if (!empty($user)) {
        // ۳. ذخیره در سشن
        $_SESSION['user_name'] = $user;
        $_SESSION['is_logged_in'] = true;
        
        // ۴. هدایت به صفحه پروفایل
        header("Location: profile.php");
        exit();
    }
}
?>
<!-- فرم HTML ساده در اینجا -->
<form method="POST">
    <input name="username" placeholder="نام کاربری">
    <button>ورود</button>
</form>
فایل ۲: profile.php
<?php
session_start(); // ۱. اینجا هم باید استارت بزنیم!

// ۲. چک می‌کنیم چیزی در سشن هست؟
if (isset($_SESSION['user_name'])) {
    echo "<h1>خوش آمدی، " . $_SESSION['user_name'] . "</h1>";
} else {
    echo "شما وارد نشده‌اید!";
}
?>

تمرین شما

صورت تمرین: شمارنده بازدید

یک فایل به نام counter.php بسازید. هدف این است که هر بار کاربر صفحه را رفرش می‌کند، تعداد بازدیدهایش در آن جلسه شمرده شود.

  1. با session_start() شروع کنید.
  2. چک کنید آیا متغیر $_SESSION['count'] وجود دارد؟ (با isset).
  3. اگر وجود نداشت (بار اول)، آن را برابر 1 قرار دهید.
  4. اگر وجود داشت، یکی به آن اضافه کنید ($_SESSION['count']++).
  5. در صفحه چاپ کنید: «شما [عدد] بار این صفحه را دیده‌اید.»

نکته: اگر مرورگر را کامل ببندید و دوباره باز کنید، چه اتفاقی برای شمارنده می‌افتد؟