آموزش Codeigniter - جلسه دوازدهم: مدیریت سشن ها
هنگام ساخت یک وبسایت، بسیار پیش میآید که نیاز خواهیم داشت تا فعالیت کاربر را تحت نظر گرفته و بدین منظور یکی از بهترین روشها، استفاده از سشنها است. پیش از این در سری آموزش پیاچپی در زومیت، شما را با سشنها آشنا کردیم. اما فریمورک Codeigniter دارای یک کلاس مجزا برای مدیریت و کار با Session ها است که کار را برای ما بسیار آسان کرده است. در ادامهی این آموزش با زومیت همراه باشید.
تعریف و مقداردهی اولیهی یک سشن
اطلاعات ذخیره شده در سشنها در همهجای وبسایت در دسترس خواهد بود ولی به منظور استفاده از این دادهها باید ابتدا سشنهای مورد نظر خود را تعریف کنیم و مقداردهی اولیه (initialize) آن را انجام دهیم. برای تعریف اینیشیالایز کردن یک سشن میتوان از دستور زیر استفاده کرد.
$this->load->library('session');
همانطور که احتمالا متوجه شدهاید، کد بالا باعث میشود تا کتابخانهی سشنها در اپلیکیشن ما لود شود و از این پس میتوانیم از دستورات و متدهای داخلی این کتابخانه در پروژهی خود استفاده کنیم. شیء سشن پس از لود کردن کتابخانهی مدیریت سشنها که session نام دارد، به صورت زیر خواهد بود:
$this->session
افزودن اطلاعات به سشنها
در پیاچپی با استفاده از آرایهی SESSION_$ میتوانستیم دادههای مورد نظر خود را در سشنها ذخیره کنیم. در این حالت باید از کدی مثل کد زیر استفاده میکردیم:
$_SESSION[‘key’] = value;
در کد بالا عبارت key نام مورد نظر ما برای سشن و عبارت value همان داده یا مقدار مورد نظر برای ذخیره شدن در سشن است. در واقع با کد بالا مقدار value را به سشن key نسبت دادهایم.
همینکار را میتوان در فریمورک Codeigniter نیز به آسانی و به صورتی منسجمتر انجام داد. بدین منظور نیز باید از کدی مثل کد زیر استفاده کنیم:
$this->session->set_userdata('some_name', 'some_value');
تابع ()set_userdata دو آرگومان ورودی دریافت میکند. اولین آرگومان که در کد بالا some_name تعیین شده، یک نام دلخواه برای سشن مورد نظر است که قصد ایجاد آن را داریم. این مقدار همان key است که برای استفاده از سشن در پیاچپی تعیین کرده بودیم. همچنین آرگومان دوم متد ()set_userdata در کد بالا some_value تعیین شده است. این آرگومان مقدار مورد نظر برای ذخیره شدن در سشن است.
علاوه بر این، تابع ()set_userdata را میتوان به روشی دیگر نیز مورد استفاده قرار داد. در واقع میتوان به جای یک مقدار تکی مثل آنچه در کد بالا مشاهده کردید، یک آرایه از مقادیر مورد نظر را در سشن خود ذخیره کنیم. در این شرایط میتوان از کدی شبیه زیر استفاده کرد:
$newdata = array( 'username' => 'mojtaba', 'email' => 'mojtaba@some-site.com', 'logged_in' => TRUE); $this->session->set_userdata($newdata);
در کد بالا یک آرایه به نام newdata$ ایجاد کردهایم که شامل سه عضو است. اعضای این آرایه با کلیدهایی به نام username و email و logged_in تعیین شده و مقدار آنها به ترتیب mojtaba و mojtaba@some-site.com و TRUE قرار داده شده است. عضو اول برای نگهداری نام کاربری، عضو دوم برای نگهداری ایمیل کاربر و عضو سوم آرایهی فوق برای نگهداری وضعیت لاگین شدن کاربر به سایت مورد استفاده واقع شده است.
در نهایت با استفاده از متد ()set_userdata از کتابخانهی session فریمورک، این آرایه را به عنوان آرگومان ورودی قرار دادهایم. بدین ترتیب به جای یک مقدار تکی، مجموعهای از مقادیر را به صورت یک آرایه در سشن مورد نظر ذخیره کردهایم.
حذف دادهها از سشن
در پیاچپی برای حذف مقادیر ذخیره شده در یک سشن، از تابع ()unset استفاده میکردیم که مثالی از آن در زیر آورده شده است:
unset($_SESSION[‘some_name’]);
کد بالا باعث میشود تا اطلاعات ذخیره شده در سشنی به نام some_name به طور کامل پاک شوند. اما حذف اطلاعات ذخیره شده در سشنها در فریمورک Codeigniter بسیار آسانتر است. بدین منظور باید از متد ()unset_userdata کتابخانهی session بهره ببریم. به مثال زیر توجه کنید:
$this->session->unset_userdata('some_name');
در کد بالا نیز مقادیر ذخیره شده در سشنی به نام some_name را با استفاده از فریمورک حذف کردهایم.
اگر قصد دارید مقادیر بیشتری را از یک سشن حذف کرده یا آرایهی ذخیره شده در یک سشن را به طور کامل پاک کنید، در این حالت میتوانید از تابع ()unset_userdata به شکل زیر بهره ببرید:
$this->session->unset_userdata($array_items);
کد بالا باعث میشود تمام آرایهی ذخیره شده در سشن مورد نظر به طور کامل حذف شود.
استفاده از دادههای ذخیره شده در سشنها
پس از ذخیره کردن اطلاعات و دادههای مورد نظر در سشنها میتواند هر زمان که نیاز بود به این دادهها دسترسی داشت. بدین منظور باید از تابع ()userdata استفاده کنیم. اگر دادههای که قصد دارید به آنها دست یابید موجود نباشند، این متد مقدار NULL را بر میگرداند. روش استفاده از این تابع را میتوانید در کد زیر مشاهده کنید:
$name = $this->session->userdata('name');
کد بالا مقدار ذخیره شده در سشنی به نام name را در متغیر name$ ذخیره میکند.
مثال
مثل همیشه ابتدا نرمافزار Xampp را اجرا کرده و سرورهای آپاچی و مایاسکیوال را در حال فعال قرار دهید.
یک پروژهی جدید Codeigniter ایجاد کرده و آن را همانند آموزشهای جلسات اولیه نصب و پیکربندی کنید. ما برای این مثال پوشهی جدیدی در htdocs نرمافزار زمپ ایجاد کردهایم و نام آن را codei-session گذاشتهایم. سپس فریمورک را در این پوشه نصب و پیکربندی کردهایم.
حال باید کنترلر مورد نظر را ایجاد کنیم. بدین منظور در مسیر application/controller یک فایل جدید به نام Session_controller.php ایجاد کرده و سپس کد زیر را در آن قرار دهید.
php class Session_controller extends CI_Controller { public function index() { //loading session library $this->load->library('session'); //adding data to session $this->session->set_userdata('name','virat'); $this->load->view('session_view'); } public function unset_session_data() { //loading session library $this->load->library('session'); //removing session data $this->session->unset_userdata('name'); $this->load->view('session_view'); } } ?>
کنترلر بالا همانطور که مشاهده میکنید شامل دو متد اصلی است. متد ()index و متد ()unset_session_data. کد بالا را به صورت خط به خط در ادامه توضیح میدهیم. ابتدا متد index را بررسی میکنیم. با استفاده از کد:
//loading session library $this->load->library('session');
کتابخانهی مدیریت سشنها را در فریمورک لود میکنیم. سپس با استفاده از کد زیر:
//adding data to session $this->session->set_userdata('name','virat');
سشن مورد نظر را ایجاد و مقدار مورد نظر را نیز در آن ذخیره میکنیم. در نهایت فایل ویو این متد را با کد زیر اجرا میکنیم.
$this->load->view('session_view');
سپس در متد unset_session_data با استفاده از کد:
//loading session library$this->load->library('session');
ابتدا کتابخانهی سشنها را در فریمورک لود میکنیم. سپس با استفاده از کد زیر:
//removing session data $this->session->unset_userdata('name'); $this->load->view('session_view');
اطلاعات ذخیره شده در سشن مورد نظرمان را به طور کامل پاک میکنیم. در واقع در این کنترلر با استفاده از متد index سشن را ایجاد و مقدار دهی کردهایم و متد unset_session_data نیز به منظور حذف اطلاعات سشن بکار میرود.
حال باید فایل ویو یاد شده را ایجاد کنیم. بدین منظور در مسیر application/views یک فایل جدید به نام session_view.php ایجاد کرده و سپس کد زیر را در آن قرار دهید:
lang = "en"> charset = "utf-8"> </span><span class="pln">CodeIgniter Session Example</span><span class="tag"> Welcome php echo $this->session->userdata('name'); ?> href = 'http://127.0.0.1/codei-session/index.php/sessionex/unset'> Click Here to unset session data.
همانطور که در بالا مشاهده میکنید با استفاده از کد:
php echo $this->session->userdata('name'); ?>
به مقدار ثبت شده در سشن در فایل ویو دستیافته و آن را به کاربر نمایش میدهیم. همچنین از آنجا که پروژه ما در پوشهی codei-session قرار دارد، لینک حذف سشن برای ما به صورت زیر خواهد بود که آن را با استفاده از تگ a در کد بالا ایجاد کردهایم و با کلیک روی این لینک، اطلاعات سشن حذف خواهد شد.
http://127.0.0.1/codei-session/index.php/sessionex/unset
در نهایت باید تغییراتی را در فایل application/config/routes.php ایجاد کنید. این فایل را باز کرده و سپس خط زیر را به آخر کدهای موجود در آن اضافه کنید:
$route['sessionex'] = 'Session_Controller';
حال پروژه را در مرورگر اجرا کنید. اگر همه چیز را به درستی و مطابق با آموزش انجام داده باشید، سشن مورد نظر ایجاد شده و مقدار آن به کاربر نمایش داده خواهد شد. همچنین با کلیک روی لینک Click Here تابع مربوط به حذف اطلاعات سشن در کنترلر فراخوانی شده و بنابراین دادههای ذخیره شده در سشن ایجاد شده در مرحلهی قبل، حذف خواهد شد. مسیر این پروژه برای ما به صورت زیر خواهد بود.
http://127.0.0.1/codei-session/index.php/sessionex
مثل همیشه اگر سوال یا پیشنهادی در مورد مباحث مطرح شده در این جلسه از سری آموزشی فریم ورک Codeigniter دارید آن را در بخش دیدگاهها با زومیت و سایر کاربران به اشتراک بگذارید.