🚀 دليلك الشامل لفهم الجلسات (Sessions) في لغة PHP

هل تساءلت يوماً كيف يتذكر موقع فيسبوك أو أمازون اسمك وبياناتك حتى بعدما تنتقل من صفحة إلى أخرى داخل الموقع؟ 🧐

السر يكمن في شيء يسمى الجلسات (Sessions). دعنا نفهم هذا المفهوم ببساطة شديدة.


❓ ما هي الجلسات (Sessions) ولماذا نحتاجها؟

في لغة PHP (ومعظم لغات البرمجة الخاصة بالويب)، هناك قاعدة ذهبية تقول إن البروتوكول الذي تعمل به الصفحات (HTTP) هو Stateless.

ماذا يعني هذا الكلام المعقد؟ 🤔 ببساطة، هذا يعني أن الخادم (Server) "ينسى" من أنت بمجرد أن تطلب صفحة جديدة. إذا كتبت اسمك في الصفحة الأولى (index.php) ثم انتقلت للصفحة الثانية (profile.php)، فإن الصفحة الثانية لن تعرف من أنت ولن تتذكر الاسم الذي كتبته.

هنا يأتي دور الجلسات (Sessions)؛ فهي تسمح لنا بتخزين معلومات عن المستخدم في خادم الموقع، لتبقى هذه المعلومات متاحة ومستمرة عبر جميع الصفحات التي يزورها المستخدم خلال زيارته الواحدة.


🛠️ كيف نبدأ باستخدام الجلسات؟

لكي نبدأ باستخدام الجلسات في أي صفحة PHP، يجب أن نستخدم دالة أساسية جداً. بدون هذه الدالة، لن يعمل أي شيء يتعلق بالجلسات.

1. بدء الجلسة session_start()

يجب كتابة الدالة session_start() في أول سطر من الكود، قبل كتابة أي وسم HTML أو أي عملية echo.

مثال بسيط:

<?php
// بدء الجلسة يجب أن يكون في بداية الملف تماماً
session_start(); 

echo "Session has started successfully!"; // تم بدء الجلسة بنجاح
?>

📦 تخزين البيانات في الجلسة

بعد أن قمنا ببدء الجلسة، كيف نخزن فيها البيانات؟ نستخدم مصفوفة خاصة جداً تسمى $_SESSION. هذه المصفوفة تعمل كمخزن عالمي يمكنك وضع أي قيمة بداخلها في صفحة، واسترجاعها في صفحة أخرى.

لنطبق ذلك بمثال عملي: تخيل أننا نريد تخزين اسم المستخدم في صفحة تسمى page1.php.

ملف page1.php:

<?php
session_start(); // لا تنسَ بدء الجلسة أولاً

// تخزين اسم المستخدم في متغير الجلسة
$_SESSION['username'] = "Ahmed Ali"; 
$_SESSION['user_role'] = "Admin"; // يمكننا تخزين أكثر من قيمة

echo "Welcome Ahmed! Your data is saved in the session."; 
?>

🔍 استرجاع البيانات من الجلسة

الآن، لنفترض أن المستخدم انتقل إلى صفحة أخرى تسمى page2.php. هل سيتمكن الموقع من معرفة اسمه دون أن يطلبه منه مرة أخرى؟ نعم!

ملف page2.php:

<?php
session_start(); // يجب بدء الجلسة في كل صفحة تريد استخدام البيانات فيها

// استخراج البيانات من مصفوفة الجلسة وعرضها
if (isset($_SESSION['username'])) {
    echo "Hello again, " . $_SESSION['username']; // سيطبع: Hello again, Ahmed Ali
} else {
    echo "Please log in first!";
}
?>

ملاحظة تعليمية: استخدمنا الدالة isset() للتأكد من أن المتغير موجود فعلاً في الجلسة قبل محاولة طباعته، وذلك لتجنب ظهور أخطاء في الصفحة. ✅


🗑️ حذف بيانات الجلسة (إنهاء الجلسة)

في بعض الأحيان، نريد مسح بيانات معينة (مثلما يحدث عند الضغط على "تسجيل الخروج" أو Logout). لدينا طريقتان للقيام بذلك:

1. حذف متغير واحد فقط:

إذا أردت حذف اسم المستخدم فقط وإبقاء باقي البيانات:

<?php
session_start();
unset($_SESSION['username']); // حذف متغير اسم المستخدم فقط
?>

2. تدمير الجلسة بالكامل:

إذا أردت مسح كل شيء وإنهاء الجلسة تماماً:

<?php
session_start();
session_unset(); // تفريغ جميع المتغيرات من الجلسة
session_destroy(); // تدمير الجلسة نهائياً من الخادم
echo "You have been logged out!";
?>

📌 ملخص سريع لما تعلمناه:

  1. session_start(): هي المفتاح الذي يفتح باب الجلسات، وتوضع في أعلى الصفحة. 🔑
  2. $_SESSION['key'] = 'value': تستخدم لحفظ البيانات في الخادم. 📦
  3. $_SESSION['key']: تستخدم لاسترجاع البيانات في أي صفحة أخرى. 🔍
  4. unset(): تحذف متغيراً واحداً من الجلسة. ❌
  5. session_destroy(): تنهي الجلسة بالكامل وتمسح جميع بياناتها. 🗑️