الفرق بين المراجعتين لصفحة: «PHP/session create id»

من موسوعة حسوب
< PHP
لا ملخص تعديل
لا ملخص تعديل
سطر 7: سطر 7:
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
string session_create_id ([ string $prefix ])
string session_create_id ([ string $prefix ])
</syntaxhighlight>تُستخدم الدالة <code>()session_create_id</code> لإنشاء  قيمة جديدة للمعرف الفريد  للجلسة الحالية، بحيث تعيد معرفًا جديدًا لا يتضارب مع غيره من المعرفات.
</syntaxhighlight>تُستخدم الدالة <code>()session_create_id</code> لإنشاء قيمة جديدة للمعرف الفريد  للجلسة الحالية، بحيث تعيد معرفًا جديدًا لا يتضارب مع غيره من المعرفات.


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


== أمثلة ==
== أمثلة ==
مثال 1: استخدام الدالة <code>session_create_id()‎</code> مع الدالة <code>session_regenerate_id()</code>‎<syntaxhighlight lang="php">
المثال 1: استخدام الدالة <code>session_create_id()‎</code> مع الدالة [[PHP/session regenerate id|<code>session_regenerate_id()</code>‎]]<syntaxhighlight lang="php">
<?php
<?php


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


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


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


سطر 89: سطر 65:


my_session_regenerate_id();
my_session_regenerate_id();
?>
?>


سطر 96: سطر 71:


== انظر أيضًا ==
== انظر أيضًا ==
* الدالة <code>[[php/session regenerate id|session_regenerate_id()]]</code>‎: تُحدث  المعرّف الفريد للجلسة بآخر جديد مُستحدث.
* الدالة <code>[[PHP/session regenerate id|session_regenerate_id()]]</code>‎: تُحدث المعرّف الفريد للجلسة بآخر جديد مُستحدث.
* الدالة <code>[[php/session start|session_start()]]</code>‎: تبدأ جلسة جديدة أو تستكمل جلسة موجودة.
* الدالة <code>[[PHP/session start|session_start()]]</code>‎: تبدأ جلسة جديدة أو تستكمل جلسة موجودة.
* session.use_strict_mode
* الدالة <code>[[php/session create sid|session_handler::create_sid()]]</code>‎: تُعيد معرّف جلسة جديدًا.
* الدالة <code>[[php/session create sid|session_handler::create_sid()]]</code>‎: تُعيد معرّف جلسة جديدًا.


سطر 104: سطر 78:
* [http://php.net/manual/en/function.session-create-id.php صفحة الدالة session_create_id‎ في توثيق PHP الرسمي.]
* [http://php.net/manual/en/function.session-create-id.php صفحة الدالة session_create_id‎ في توثيق PHP الرسمي.]
[[تصنيف:PHP]]
[[تصنيف:PHP]]
[[تصنيف:PHP Function]]
[[تصنيف:PHP Session]]
[[تصنيف:PHP Session]]

مراجعة 11:35، 14 أغسطس 2018

(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();
?>

انظر أيضًا

مصادر