كيفية إعداد الجلسة في Codeمشعل مع مثال
⚡ ملخص ذكي
Codeتُخزّن إدارة جلسات Igniter بيانات المستخدم عبر طلبات HTTP عديمة الحالة، مما يسمح للتطبيق بتذكر المستخدم المُسجّل دخوله، أو عناصر سلة التسوق، أو رسائل التنبيه لمرة واحدة. يُنشئ هذا المثال رسائل تنبيه وتسجيل دخول مُحاكى باستخدام Codeمكتبة جلسات Igniter.

Codeإدارة جلسات Igniter
إذا سبق لك تطوير تطبيقات سطح المكتب، فربما تعلم أنه يمكنك تعريف متغير عام، وتعيين قيمة له، واستخدامه طوال دورة حياة التطبيق. عند فتح وإغلاق أكثر من نموذج، سيتمكن كل طلب من الوصول إلى المتغير العام.
بمعنى آخر، يتم الحفاظ على حالة التطبيق. أي أنه إذا قمتَ عند تسجيل الدخول بتعيين اسم الشركة إلى متغير عام، فسيتم الاحتفاظ بحالة اسم الشركة حتى بعد إغلاق نافذة تسجيل الدخول.
يعمل بروتوكول HTTP بشكل مختلف قليلاً عن السيناريو الذي وصفناه للتو. فهو عديم الحالة. بمعنى آخر، أي شيء تفعله في طلب واحد لا يبقى في الطلب التالي.
للتغلب على هذه المشكلة، لدينا حلان في لغة PHP. يمكننا إما استخدام ملفات تعريف الارتباط، وهي ملفات صغيرة تُخزَّن على جهاز المستخدم، أو استخدام الجلسات، وهي مشابهة لملفات تعريف الارتباط ولكنها تُخزَّن على الخادم ولها سعة أكبر.
متى تستخدم الجلسات؟
تُعدّ الجلسات مفيدةً عادةً عندما ترغب في معرفة أنشطة المستخدم من صفحةٍ إلى أخرى. على سبيل المثال، لنفترض أن لديك منطقةً محميةً على الموقع الإلكتروني. لا يحتاج المستخدمون إلى تسجيل الدخول في كل صفحة. يمكنك السماح للمستخدم بتسجيل الدخول مرةً واحدةً وتخزين بياناته في متغير جلسة، ثم إعادة استخدام البيانات نفسها في الطلبات اللاحقة. تشمل حالات الاستخدام الأخرى العمل على متجر.ping النظام ويتعين على المستخدم إضافة عناصر إلى المتجرping عربة التسوق.
بدلا من ذلك، Codeيستخدم Igniter أيضًا الجلسات لجعل البيانات متاحة مرة واحدة فقط عند الطلب التالي. يُعد هذا مفيدًا عند تعديل سجل قاعدة البيانات وتحديثه، والرغبة في إرسال بعض الملاحظات للمستخدم عند إعادة توجيهه إلى صفحة أخرى.
إرسال رسائل فلاش إلى صفحات أخرى مع جلسات CI
ستتعرف في هذا القسم على كيفية إرسال رسائل فلاش إلى صفحات أخرى باستخدام مكتبة الجلسة الموجودة Codeأنبوب.
قم بإنشاء ملف جديد SessionController في
application/controllers/SessionController.php
أضف الكود التالي
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class SessionController extends CI_Controller { public function __construct() { parent:: __construct(); $this->load->helper('url'); $this->load->library('session'); } public function index() { $this->load->view('sessions/index'); } public function flash_message(){ $this->session->set_flashdata('msg', 'Welcome to CodeIgniter Flash Messages'); redirect(base_url('flash_index')); } }
هنا،
- تحدد فئة SessionController CI_Controller {...} فئة SessionController وتوسع فئة وحدة التحكم الأصلية.
- تحدد الوظيفة العامة __construct() {...} طريقة المُنشئ التي تقوم بتهيئة الفئة الأصلية، وتحميل مساعد url ومكتبة الجلسة.
- يحدد فهرس الوظيفة العامة () {...} طريقة فهرس الجلسة التي تقوم بتحميل عرض فهرس الجلسة.
- تحدد الوظيفة العامة flash_message(){…} طريقة رسالة الفلاش التي تقوم بتعيين بيانات الفلاش ثم تعيد التوجيه إلى مسار flash_index
لنقم الآن بإنشاء العرض الذي سيعرض قيمة بيانات الجلسة.
أنشئ مجلدًا جديدًا باسم sessions في application/views
قم بإنشاء ملف Index.php جديد في التطبيق/المشاهدات/الجلسات
أضف الكود التالي
<html>
<head>
<title>Code Igniter Flash Session</title>
</head>
<body>
<p>The session value of msg is <b> <?= $this->session->userdata('msg');?> </b></p>
</body>
</html>
هنا،
session->userdata('msg');?> يسترجع قيمة بيانات الجلسة باستخدام المفتاح msg ويعرضها في المتصفح.
لنقم الآن بإنشاء مسارات لطريقة فلاش الجلسة الخاصة بنا
افتح التطبيق/config/routes.php
أضف الأسطر التالية
$route['flash_index'] = 'sessioncontroller'; $route['flash_message'] = 'sessioncontroller/flash_message';
لنبدأ الآن تشغيل الخادم المدمج لـ PHP واختبار رسائل الفلاش لدينا
افتح المحطة
قم بتشغيل الأمر التالي
cd C:\Sites\ci-app php -S localhost:3000
هنا،
يتصفح الأمر أعلاه دليل رمز التطبيق ويبدأ تشغيل الخادم المدمج على المنفذ 3000.
ملاحظة: يجب أن يتطابق مسار التطبيق مع المسار الذي قمت بتنزيله منه Codeباستخدام برنامج Igniter، يمكنك استخدام أي رقم منفذ متاح على جهاز الكمبيوتر الخاص بك. ليس من الضروري استخدام المنفذ 3000.
قم بتحميل ما يلي URL في متصفح الويب الخاص بك: http://localhost:3000/flash_message
سيتم تحويلك إلى ما يلي URLوستحصل على النتائج التالية: http://localhost:3000/flash_index
انقر فوق زر التحديث في متصفح الويب الخاص بك أو اضغط على F5
سوف تحصل الآن على النتائج التالية
تخزين بيانات المستخدم في جلسات CI
لنلقِ نظرة الآن على مثال أكثر تقدماً. ولتبسيط الأمر، سنحاكي عملية مصادقة المستخدم ولن نقوم بالتنفيذ الفعلي للتحقق من سجل المستخدم في قاعدة البيانات وكلمة المرور المُدخلة.
لنبدأ بالطرق
افتح Routes.php الموجود في التطبيق/التكوين
أضف المسارات التالية
$route['login'] = 'sessioncontroller/login'; $route['authenticate'] = 'sessioncontroller/authenticate'; $route['settings'] = 'sessioncontroller/settings'; $route['dashboard'] = 'sessioncontroller/dashboard'; $route['logout'] = 'sessioncontroller/logout';
هنا،
- $route['login'] = 'sessioncontroller/login'; يحدد المسار الذي يعرض نموذج تسجيل الدخول
- $route['authenticate'] = 'وحدة تحكم الجلسة/المصادقة'; يحدد المسار الذي يحاكي تسجيل دخول المستخدم الناجح ويحدد بيانات تسجيل الدخول للجلسة.
- $route['settings'] = 'وحدة تحكم الجلسة/الإعدادات'; يحدد صفحة محمية يجب أن تكون متاحة فقط للمستخدمين الذين قاموا بتسجيل الدخول
- $route['dashboard'] = 'وحدة تحكم الجلسة/لوحة المعلومات'; يحدد صفحة محمية يجب أن تكون متاحة فقط للمستخدمين الذين قاموا بتسجيل الدخول.
- $route['logout'] = 'وحدة تحكم الجلسة/تسجيل الخروج'; يقوم بتسجيل خروج المستخدم عن طريق تدمير بيانات الجلسة
لنقم الآن بتحديث وحدة التحكم في الجلسة
افتح التطبيق/وحدات التحكم/SessionController.php
أضف الطرق التالية
public function check_auth($page) { if (!$this->session->userdata('logged_in')) { $this->session->set_flashdata('msg', "You need to be logged in to access the $page page."); redirect('login'); } } public function login() { $this->load->view('sessions/login'); } public function authenticate() { $this->session->set_userdata('username', 'John Doe'); $this->session->set_userdata('logged_in', TRUE); redirect(base_url('dashboard')); } public function dashboard() { $this->check_auth('dashboard'); $this->load->view('sessions/dashboard'); } public function settings() { $this->check_auth('settings'); $this->load->view('sessions/settings'); } public function logout() { $this->session->unset_userdata('username'); $this->session->unset_userdata('logged_in'); redirect(base_url('login')); }
هنا،
- تُعرّف الدالة العامة `check_auth($page) {…}` الدالة التي تتحقق مما إذا كان المستخدم قد سجّل دخوله، ثم تسمح له بالوصول إلى الصفحة. إذا لم يكن المستخدم مسجلاً دخوله، فسيتم توجيهه إلى صفحة تسجيل الدخول مع رسالة تنبيه.
- public function login() {…} تقوم بتحميل عرض تسجيل الدخول الموجود في دليل الجلسات.
- تحدد الدالة public function authenticate() {…} بيانات مستخدم الجلسة للمفاتيح logged_in وusername. ملاحظة: لا نقوم بالتحقق من أي تفاصيل تسجيل دخول مقابل قاعدة البيانات. نفترض ببساطة أن التفاصيل المرسلة صحيحة ونقوم بتعيين بيانات الجلسة.
- تقوم الدالة العامة dashboard() {…} بتحميل صفحة لوحة التحكم بعد استدعاء $this->check_auth('dashboard'); والتي تتحقق من تعيين مفتاح جلسة logged_in.
- تقوم الدالة العامة settings() {…} بتحميل صفحة الإعدادات، وهي محمية أيضًا.
- تقوم الوظيفة العامة logout() {…} بتدمير بيانات الجلسة وتسجيل خروج المستخدم. تقوم الطريقة أيضًا بإعادة التوجيه إلى صفحة تسجيل الدخول
Codeعرض جلسة Igniter
قم بإنشاء العروض التالية في application/views/sessions
- لوحة القيادة. php
- login.php
- settings.php
أضف الكود التالي إلى ملف dash.php
<!DOCTYPE html> <html> <head> <title>Dashboard</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https:0 </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item is-active">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link"><?=$this->session->userdata(3);?></a> <div class="navbar-dropdown"> <a class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Welcome Page</h3> </div> </div> </body> </html>
هنا،
جلسة -> بيانات المستخدم ('اسم المستخدم')؛؟> تعرض اسم المستخدم الذي قمنا بتعيينه في طريقة المصادقة
أضف الكود التالي إلى login.php
<!DOCTYPE html> <html> <head> <title>Login</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https:0 </head> <body> <div class="container"> <div class="column"> <p><?=$this->session->userdata(1);?></p> <form method="post" action="<?= site_url('authenticate')?>"> <div class="field"> <label class="label">Username</label> <div class="control"> <input class="input" type="text" placeholder="Text input"> </div> </div> <div class="field"> <label class="label">Password</label> <div class="control"> <input class="input" type="password" placeholder="Text input"> </div> </div> <div class="field is-grouped"> <div class="control"> <button class="button is-success">Login</button> </div> </div> </form> </div> </div> </body> </html>
هنا،
يتم إرسال نموذج تسجيل الدخول إلى مسار المصادقة.
أضف الكود التالي إلى settings.php
<!DOCTYPE html> <html> <head> <title>Settings</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="https:0 </head> <body> <div class="container"> <div class="column"> <nav class="navbar" role="navigation" aria-label="main navigation"> <div id="navbarBasicExample" class="navbar-menu"> <div class="navbar-start"> <a href="<?= site_url('dashboard')?>" class="navbar-item">Dashboard</a> <a href="<?= site_url('settings')?>" class="navbar-item">Settings</a> </div> <div class="navbar-end"> <div class="navbar-item has-dropdown is-hoverable"> <a class="navbar-link">Jim Jones</a> <div class="navbar-dropdown"> <a href="#" class="navbar-item">My Profile</a> <hr class="navbar-divider"> <a href="<?= site_url('logout')?>" class="navbar-item">Sign out</a> </div> </div> </div> </div> </nav> <h3>Settings Page</h3> </div> </div> </body> </html>
هذا كل ما لدينا من آراء. فلنختبر تطبيقنا الآن.
في هذا البرنامج التعليمي، نستخدم خادم الويب PHP المدمج، ولكن يمكنك استخدام أي خادم ويب يدعم PHP.
افتح المحطة
قم بتشغيل الأمر التالي
cd C:\Sites\ci-app php -S localhost:3000
هنا،
يتصفح الأمر أعلاه دليل رمز التطبيق ويبدأ تشغيل الخادم المدمج على المنفذ 3000.
ملاحظة: يجب أن يتطابق مسار التطبيق مع المسار الذي قمت بتنزيله منه Codeباستخدام برنامج Igniter، يمكنك استخدام أي رقم منفذ متاح على جهاز الكمبيوتر الخاص بك. ليس من الضروري استخدام المنفذ 3000.
افتح ما يلي URL في متصفح الويب الخاص بك: http://localhost:3000/dashboard
سيتم تحويلك إلى الصفحة التالية
انقر فوق زر تسجيل الدخول
سوف ترى النتائج التالية
بعد أن قمنا بتسجيل الدخول، أصبحنا الآن قادرين على رؤية بيانات الجلسة.




