الدالة session_gc()‎ في PHP

من موسوعة حسوب
< PHP

(PHP 7, PHP 7.1.0)

تجمع الدالة session_gc()‎ البيانات المُهملة garbage data)‎) .

الوصف

int session_gc ( void )

تجمع الدالة ()session_gc البيانات المُهملة (garbage data) . تعمل PHP على تجميع البيانات المُهملة افتراضيًا طِبقًا لاحتمالات افتراضية على الجلسة.

تِلك الإحتمالات تعمل بشكل جيد إلى حد ما ولكن يوجد بعض المشاكل:

  1. المواقع ذات مرور المُستخدمين المُنخفض قد لا يُحذف فيها البيانات المُهملة في فترة زمنية مُناسبة.
  2. المواقع ذات مرور المستخدمين العادي قد تتكرر بها البيانات المُهملة ولا تُحذف.
  3. تُجمع البيانات المُهملة طِبقًا لطلب المُستخدم مِما قد يُسبب تأخيرًا في جمع البيانات المُهملة.

لِذلك يُقترح تجميع البيانات المُهملة دوريًا في أنظمة الإنتاج مِثل "cron" في الأنظمة الشبيهة بيونكس، وتأكد من عدم تفعيل الاحتمالات الافتراضية لجمع البيانات المُهملة عن طريق ضبط session.gc_probability إلى القيمة 0.

القيم المعادة

تُعيد الدالة session_gc()‎ عدد الملفات التي حُذِفَت في حالة نجاحها، والقيمة FALSE في حالة فشلها.

في حالة استخدام معاملات حفظ الملفات القديمة، لا تُعيد عدد الملفات المحذوفة، وإنما راية الفشل/النجاح فقط. في هذه الحالة يُعاد الرقم 1 في حالة نجاح الدالة مهما كان عدد الملفات المحذوفة.   

أمثلة

المثال 1: شرح استخدام الدالة في حالة مُدير المهام مِثل "cron"

<?php

// يجب أن تُنفذ الشيفرة في نفس الخادم المُستخدم
// يجب بداية الجلسة النشطة للوصول إلى مخازن البيانات
session_start();

// بدء جمع البيانات المُهملة في الحال
session_gc();

// مسح عنوان الجلسة الافتراضي الذي أُنشِئ بواسطة جامع البيانات المُهملة
session_destroy();

?>

المثال 2: استخدام سكربت قابل للتنفيذ من المستخدم

<?php

// لاحظ أنه يُفضل استخدام الدالة بواسطة مُدير المهام ولكن يُمكن استخدامها كالآتي 
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;

session_start();

// يقوم بتنفيذ جامع البيانات المُهملة عند انتهاء مُدة جامع البيانات الافتراضي 
if (file_exists($gc_time)) {
    if (filemtime($gc_time) < time() - $gc_period) {
        session_gc();
        touch($gc_time);
    }
} else {
    touch($gc_time);
}
?>

انظر أيضًا

  • الدالة session_start()‎: تبدأ جلسة جديدة أو تستكمل جلسة موجودة.
  • الدالة session_destroy()‎: تمسح جميع البيانات المُسجلة في الجلسة.

مصادر