كيفية التعامل مع الجلسات (Sessions) في PHP

تمت الكتابة بواسطة: عبد الحكيم

تارخ آخر تحديث: 19 ديسمبر 2024

محتوى المقال

كيفية التعامل مع الجلسات (Sessions) في PHP

الجلسات (Sessions) هي آلية مهمة في PHP تُستخدم لتخزين معلومات حول المستخدمين عبر صفحات متعددة على موقع الويب. على عكس ملفات تعريف الارتباط (Cookies)، يتم تخزين بيانات الجلسة على الخادم، مما يجعلها أكثر أمانًا لحفظ المعلومات الحساسة. في هذا المقال، سنتعرف على كيفية إنشاء الجلسات، تخزين البيانات فيها، إدارة وقت انتهاء الجلسة، وإنهاء الجلسات بشكل آمن.

ما هي الجلسات في PHP؟

الجلسة (Session) في PHP هي طريقة لتخزين المعلومات عن المستخدم أثناء تنقله بين صفحات الويب. يتم تخصيص معرف فريد لكل جلسة، ويتم استخدام هذا المعرف لتتبع المستخدم وربطه ببياناته المخزنة على الخادم. يُعتبر هذا مفيدًا بشكل خاص لتطبيقات الويب التي تتطلب الاحتفاظ بحالة المستخدم، مثل مواقع التجارة الإلكترونية أو أنظمة تسجيل الدخول.

لماذا نستخدم الجلسات؟

تُستخدم الجلسات لأنها توفر طريقة آمنة وفعالة لتخزين المعلومات الحساسة مؤقتًا. من بين الاستخدامات الشائعة للجلسات:

  • تتبع حالة تسجيل الدخول للمستخدمين.
  • إدارة عربات التسوق في مواقع التجارة الإلكترونية.
  • تخزين تفضيلات المستخدم عبر زيارات متعددة.

كيفية بدء جلسة في PHP

لبدء جلسة جديدة في PHP، يجب استخدام الدالة session_start(). من المهم جدًا أن يتم استدعاء هذه الدالة في بداية الملف، قبل إرسال أي بيانات إلى المتصفح (مثل الوسوم HTML).

مثال على بدء جلسة

لنبدأ بجلسة جديدة ونخزن فيها بعض المعلومات:

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

// تخزين بيانات في الجلسة
$_SESSION['username'] = 'Ahmed';
$_SESSION['role'] = 'admin';

// عرض البيانات المخزنة في الجلسة
echo 'مرحبًا، ' . $_SESSION['username'] . '. دورك هو ' . $_SESSION['role'] . '!';
?>

في هذا المثال:

  • نبدأ الجلسة باستخدام session_start().
  • نخزن بيانات المستخدم مثل username وrole في الجلسة باستخدام المصفوفة $_SESSION.
  • نعرض البيانات المخزنة في الجلسة على المستخدم.

إدارة بيانات الجلسة

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

تحديث بيانات الجلسة

لتحديث قيمة موجودة في الجلسة، يمكنك ببساطة إعادة تعيينها:

<?php
session_start();

// تحديث قيمة الدور في الجلسة
$_SESSION['role'] = 'editor';

// عرض القيمة الجديدة
echo 'دورك الجديد هو ' . $_SESSION['role'] . '!';
?>

حذف بيانات من الجلسة

لحذف قيمة معينة من الجلسة، يمكنك استخدام الدالة unset():

<?php
session_start();

// حذف قيمة معينة من الجلسة
unset($_SESSION['role']);

// التحقق من حذف القيمة
if (isset($_SESSION['role'])) {
    echo 'القيمة لا تزال موجودة.';
} else {
    echo 'تم حذف القيمة بنجاح.';
}
?>

في هذا المثال، نقوم بحذف قيمة 'role' من الجلسة باستخدام unset()، ثم نتحقق مما إذا كانت القيمة قد حُذفت بنجاح.

إدارة وقت انتهاء الجلسة

تقوم الجلسات في PHP بشكل افتراضي بانتهاء صلاحيتها بعد فترة زمنية معينة من عدم النشاط. يمكن تعديل هذه الفترة الزمنية عن طريق إعدادات PHP أو برمجيًا. كما يمكن إنهاء الجلسة يدويًا عند الحاجة.

تعديل مدة الجلسة الافتراضية

يمكن تعديل مدة الجلسة الافتراضية عبر إعدادات php.ini أو باستخدام دالة ini_set داخل الكود.

مثال: تعديل مدة الجلسة برمجيًا

<?php
// تعيين مدة انتهاء الجلسة إلى 30 دقيقة (1800 ثانية)
ini_set('session.gc_maxlifetime', 1800);
session_start();
// متابعة باقي كود الجلسة هنا
?>

في هذا المثال، نستخدم ini_set لتغيير مدة الجلسة إلى 30 دقيقة.

إنهاء الجلسة

عندما يريد المستخدم تسجيل الخروج، من الجيد إنهاء الجلسة بالكامل لضمان عدم بقاء أي بيانات في الجلسة.

مثال: إنهاء الجلسة

<?php
session_start();

// إلغاء جميع متغيرات الجلسة
$_SESSION = [];

// حذف كعكة الجلسة إذا كانت موجودة
if (ini_get('session.use_cookies')) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() 42000,
        $params['path'], $params['domain'],
        $params['secure'], $params['httponly']);
}

// تدمير الجلسة
session_destroy();

// إعادة التوجيه إلى صفحة تسجيل الدخول
header('Location: login.php');
exit();
?>

في هذا المثال، نقوم بإنهاء الجلسة بالكامل عن طريق إلغاء جميع المتغيرات، حذف كعكة الجلسة (Session Cookie)، ثم تدمير الجلسة باستخدام session_destroy(). أخيرًا، نعيد توجيه المستخدم إلى صفحة تسجيل الدخول.

أفضل الممارسات عند استخدام الجلسات في PHP

للحفاظ على أمان وكفاءة جلسات PHP، هناك بعض أفضل الممارسات التي يجب اتباعها:

1. بدء الجلسة في بداية الملف

تأكد دائمًا من استدعاء session_start() في بداية الملف، قبل إرسال أي بيانات إلى المتصفح، لتجنب أي مشاكل في إدارة الجلسات.

2. تأمين بيانات الجلسة

تأكد من تخزين البيانات الحساسة في الجلسات بحذر. يمكنك استخدام تقنيات التشفير لحماية البيانات الهامة.

3. تقليل وقت انتهاء الجلسة

حدد مدة زمنية قصيرة لانتهاء الجلسة لضمان عدم بقاء الجلسات غير المستخدمة نشطة لفترات طويلة، مما قد يشكل خطرًا أمنيًا.

4. استخدام HTTPS

عند استخدام الجلسات في بيئة إنتاج، تأكد من أن الموقع يعمل عبر HTTPS لضمان أن بيانات الجلسة تُرسل بشكل آمن عبر الشبكة.

5. تجنب استخدام المتغيرات العامة غير الآمنة

احرص على عدم تخزين البيانات الحساسة مباشرة في متغيرات الجلسة دون الحاجة إلى ذلك. استخدم آليات التحقق والتصفية المناسبة.

خاتمة

الجلسات في PHP توفر وسيلة فعالة وآمنة لتخزين البيانات عبر صفحات الويب خلال فترة زيارة المستخدم. من خلال فهم كيفية إنشاء الجلسات وإدارتها بشكل صحيح، يمكنك بناء تطبيقات ويب قوية وآمنة. باتباع أفضل الممارسات المذكورة، يمكنك ضمان أن تكون بيانات المستخدم آمنة ومحمية أثناء تفاعله مع موقعك.

طور مهاراتك: مقالات يجب قراءتها في البرمجة