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

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

(PHP 7, PHP 7.1.0)

تنتج الدالة session_create_id()‎ معرّفا جديدًا للجلسة.

الوصف

string session_create_id ([ string $prefix ])

تُستخدم الدالة ()session_create_id لإنشاء قيمة جديدة للمعرف الفريد للجلسة الحالية، بحيث تعيد معرفًا جديدًا لا يتضارب مع غيره من المعرفات.

لن تتحقق الدالة ()session_create_id من وجود تضارب بين المعرفات إذا لم تكن الجلسة نشطةً.

المعرف الفريد للجلسة يتم إنتاجه طِبقًا لإعدادات php.ini.

من المهم أن يكون سكربت حذف الملفات المؤقتة مشغلًا من نفس حساب مستخدم خادم الويب، وإلا فقد تواجه مشاكل مع الأذونات خصوصًا إذا كانت الجلسات تُحفَظ كملفات.

المعاملات

prefix

إذا ضبط المعامل prefix، فسيُسبَق مُعرِّف الجلسة الجديد به.

بالنسبة للحروف المسموح بِها في التسمية فهي من a حتى z ومن A حتى Z، ومن 0 حتى 9، والفاصلة الإنجليزية ";"، وعلامة ناقص "-".

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

تُعيد الدالة ()session_create_id المعرّف الجديد للجلسة الحالية مع ضمان عدم وجود تضارب بين المعرفات ، لن تتحقق الدالة من وجود تضارب إذا لم تكن الجلسة نشطةً.

أمثلة

المثال 1: استخدام الدالة session_create_id()‎ مع الدالة session_regenerate_id()

<?php

function my_session_start() {
    session_start();
    // لا يُسمح باستعمال المعرف الفريد القديم للدالة
    if (!empty($_SESSION['deleted_time']) && $_SESSION['deleted_time'] < time() - 180) {
        session_destroy();
        session_start();
    }
}

function my_session_regenerate_id() {
    // التحقق من عدم وجود تضارب بين المعرفات   
    if (session_status() != PHP_SESSION_ACTIVE) {
        session_start();
    }
    // تحذير: لا تستمع متغيرات نصية سرية كبادئة للرقم التعريفي
    $newid = session_create_id('myprefix-');
    // حدد فترة زمنية للحذف، حيث لا ينصح بحذف بيانات الجلسة فوريًا لعدة أسباب
    $_SESSION['deleted_time'] = time();
    // إنهاء الجلسة
    session_commit();
    // تأكد مِن قبول الرقم التعريفي للجلسة المُعرف بواسطة المُستخدم
    // يجب تفعيل use_strict_mode للعمليات الطبيعية
    ini_set('session.use_strict_mode', 0);
    // حدد معرفا فريدا للجلسة
    session_id($newid);
    //  إبدأ الجلسة بالمعرف الفريدا الجديد
    session_start();
}

//  تأكد من تمكين use_strict_mode حيث أنه ضروري لأسباب أمنية
ini_set('session.use_strict_mode', 1);
my_session_start();

// الرقم التعريفي سيتم إعادة إنتاج المعرف الفريد  كُلما: يسجل المُستخدم الدخول أو الخروج وعند مرور مُدة زمنية معينة //

my_session_regenerate_id();
?>

انظر أيضًا

مصادر