English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في 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 (الرجاء استبدال #بـ@ عند إرسال البريد الإلكتروني) لإبلاغنا، وتقديم الدليل، إذا تم التحقق من ذلك، فإن هذا الموقع سيرفع محتوى يشتبه في انتهاك حقوق النسخ فورًا.