English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تفسير وظيفة session في ThinkPHP

في PHP، يتم استخدام $_SESSION للتعامل مع session، بينما يقدم ThinkPHP دالة تعبئة session هي session(). هذه الوظيفة الواحدة تحقق من إضافة، حذف، تعديل، واستعلام session. سنرى لاحقًا تطبيقاتها وتحقيقها.

تحديد وظيفة session() يتم في ملف Common/functions.php.

ضبط session

وظيفة function(session($name='', $value='')) تحتوي على اثنين من المعلمات، عندما يكون $name مصفوفة فإنها تقوم بضبط session. يمكن استخدامها كما يلي:

$name = array(
     ‘name’ => ‘name’
     ‘path’ => ‘/tmp/’
     ‘expire’ => 0
);
session($name);

هذه الإعدادات تتم قبل بدء session. عند تعريف هذه الوظيفة في ThinkPHP، يتم أولاً التحقق مما إذا كان $name هو مصفوفة، مما يعني أننا نقوم بتعيين session، ثم تنفيذ الكود المناسب للتعيين.

كود التنفيذ كالتالي:

إذا (is_array($name)) { // يتم تعريف session قبل session_start
  إذا (isset($name['prefix'])) C('SESSION_PREFIX', $name['prefix']);
  إذا (C('VAR_SESSION_ID') && isset($_REQUEST[C('VAR_SESSION_ID')])){
    session_id($_REQUEST[C('VAR_SESSION_ID')]);
  } أوtherwise إذا (isset($name['id'])) {
    session_id($name['id']);
  }
  إذا ('common' != APP_MODE) { // قد لا يدعمها بعض الأنماط الأخرى
    ini_set('session.auto_start', 0);
  }
  إذا (isset($name['name']))   session_name($name['name']);
  إذا (isset($name['path']))   session_save_path($name['path']);
  إذا (isset($name['domain']))  ini_set('session.cookie_domain', $name['domain']);
  إذا (isset($name['expire'])) {
    ini_set('session.gc_maxlifetime', $name['expire']);
    ini_set('session.cookie_lifetime', $name['expire']);
  }
  إذا (isset($name['use_trans_sid'])) ini_set('session.use_trans_sid', $name['use_trans_sid'] ? 1 : 0);
  if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0);
  if(isset($name['use_cookies'])) ini_set('session.use_cookies', $name['use_cookies']?1:0);
  if(isset($name['cache_limiter'])) session_cache_limiter($name['cache_limiter']);
  if(isset($name['cache_expire'])) session_cache_expire($name['cache_expire']);
  if(isset($name['type']))  C('SESSION_TYPE',$name['type']);
}

……

في ThinkPHP، يقدم نظام التخزين للجلسة mysql وmemache كنوعين من قواعد البيانات. بالطبع، في الحالة الافتراضية يتم استخدام تخزين الملفات. كود التحقق من طريقة تخزين session كما يلي:
  if(C('SESSION_TYPE')) { //قراءة driver session
  $type = C('SESSION_TYPE');
//استدعاء برنامج driver mysql
$hander =  new $class(); //إنشاء معالج
//تسجيل المعالج
  session_set_save_handler( 
    array(&$hander,"open"),
    array(&$hander,"close"),
    array(&$hander,"read"),
    array(&$hander,"write"),
    array(&$hander,"destroy"),
    array(&$hander,"gc")
  );
}

تم إعداد نظام التخزين للجلسة من خلال خيار التكوين SESSION_TYPE.

SESSION_TYPE=>'Mysql'  //يخزن session في قاعدة بيانات mysql

بعد إتمام الإعداد إذا تم تشغيل session تلقائيًا، سيبدأ النظام session تلقائيًا

// تشغيل session
if(C('SESSION_AUTO_START')) session_start();

إذا كنت ترغب في إغلاق التشغيل التلقائي لـ session، يمكنك تكوين الخيار SESSION_AUTO_START كما يلي:

SESSION_AUTO_START => false

إذا تم إغلاق التشغيل التلقائي للنظام، يمكن تشغيل session يدويًا من خلال ملفات المشروع العامة أو في المسيطر أو من خلال دعوة session_start() يدويًا. أو يمكن استخدام دالة session، ويتم استخدامها كما يلي:

session('[start]');

في ThinkPHP، يتم تنفيذ الكود كما يلي:

if ('[pause]' == $name) { // تعطيل session
   session_write_close();
} elseif ('[start]' == $name) { // تشغيل session
   session_start();
} elseif ('[destroy]' == $name) { // تدمير session
   $_SESSION = array();
   session_unset();
   session_destroy();
} elseif ('[regenerate]' == $name) { // إعادة إنشاء id
   session_regenerate_id();
}

تعيين session

تعيين session بسيط للغاية، يتم استخدامها مباشرة:

session('name','onmpw');

بالإضافة إلى ذلك، يمكن ربط المفاتيح ببعضها البعض باستخدام '.'.

session('name1.name2','onmpw'); // متساوي لـ $_SESSION['name1']['name2'] = 'onmpw';

في ThinkPHP، يتم تنفيذ عملية تعيين session كما يلي:

if(strpos($name,'.')){
     list($name1,$name2) =  explode('.',$name);
     if($prefix){
          $_SESSION[$prefix][$name1][$name2] = $value;
     }
          $_SESSION[$name1][$name2] = $value;
     }
}
     if($prefix){
          $_SESSION[$prefix][$name] = $value;
     }
          $_SESSION[$name] = $value;
     }
}

$prefix تم تكوينه من خلال الخيار SESSION_PREFIX.

استخراج قيمة session

استخراج قيمة session بسيط نسبياً.

أولاً، للحصول على جميع session، يتم استخدام الطريقة التالية

$values = session();

في هذه الحالة، يتم الحصول على مجموعة من البيانات. في ThinkPHP، يتم تنفيذ الكود كما يلي:

إذا ('' == $name) {
  // الحصول على جميع session
  return $prefix ? $_SESSION[$prefix] : $_SESSION;
}

ثم استخراج القيمة الفردية

$value1 = session('name');
// أو
$value2 = session('name1.name2');

كود التنفيذ كالتالي:

if(strpos($name,'.')){
   list($name1,$name2) =  explode('.',$name);
   return isset($_SESSION[$name1][$name2])?$_SESSION[$name1][$name2]:null; 
}
   return isset($_SESSION[$name])?$_SESSION[$name]:null;
}

حذف session

حذف session يتكون من شفط session، تدمير session وحذف قيمة session الفردية.

سأبدأ بشرح شفط session. شفط session يعني إرسال قيمة $name إلى null

session(null); // شفط session

كود التنفيذ كالتالي:

if(is_null($name)){ // شفط session
   if($prefix) {
    unset($_SESSION[$prefix]);
   }
    $_SESSION = array();
   }
}

شفط session يعني إزالة البيانات من ملفات session أو من الجداول، ولكن الملفات ستظل موجودة.

تدمير session

session('[destroy]');

كود التنفيذ في ThinkPHP كالتالي:

if('[destroy]'==$name){ // تدمير session
   $_SESSION = array();
   session_unset();
   session_destroy();
}

الفرق بين حذف session وشفط session هو أن حذف session سيقوم بتدمير الملفات أيضًا.

في النهاية، حذف قيمة session الفردية. يمكن استخدامها كما يلي

session('name',null);

حذف قيمة session الفردية، يمكنك حذفها بتعيين القيمة الثانية $value إلى null.

if(is_null($value)){ // حذف session
  if(strpos($name,'.')){
    list($name1,$name2) =  explode('.',$name);
    if($prefix){
      unset($_SESSION[$prefix][$name1][$name2]);
    }
      unset($_SESSION[$name1][$name2]);
    }
   }
    if($prefix){
      unset($_SESSION[$prefix][$name]);
    }
      unset($_SESSION[$name]);
    }
  }
}

تحقق من session

سأقوم بشرح بسيط لتحقق من session. التحقق هو التحقق من وجود متغير.

isset($_SESSION[‘name’]);

ThinkPHP قام بتعريف session() دالة مثل هذا لتحقق

session(‘?name’); // تحقق من whether تم تعيين session

تحقيق الكود أيضًا يستخدم طريقة التحقق الأصلية

$name  = substr($name,1);
if(strpos($name,'.')){ // دعم اللوحات
   list($name1,$name2) =  explode('.',$name);
   return $prefix?isset($_SESSION[$prefix][$name1][$name2]):isset($_SESSION[$name1][$name2]);
}
   return $prefix?isset($_SESSION[$prefix][$name]):isset($_SESSION[$name]);
}

الآن تقريبًا شرح لجميع وظائف دالة session()، وكيفية تنفيذ ThinkPHP. نأمل أن يكون محتوى هذا المقال قد ساعدكم في استخدام ThinkPHP.

بيان: محتوى هذا المقال تم جمعه من الإنترنت، يملك المالك الأصلي حقوق الملكية، تم جمع المحتوى من قبل المستخدمين عبر الإنترنت بطرقهم الخاصة، ويملك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي، ولا يتحمل هذا الموقع أي مسؤولية قانونية متعلقة بذلك. إذا كنت قد وجدت محتوى يشتبه في انتهاك حقوق النسخ، فمرحبًا بمراسلتنا عبر البريد الإلكتروني إلى: notice#oldtoolbag.com (الرجاء استبدال #بـ@ عند إرسال البريد الإلكتروني) لإبلاغنا، وتقديم الدليل، إذا تم التحقق من ذلك، فإن هذا الموقع سيرفع محتوى يشتبه في انتهاك حقوق النسخ فورًا.

أنت قد تعجب بهذا