ذخیره اطلاعات در متغیرها برای کاربردهای مختلفی در پیاچپی در اختیار توسعهدهندگان قرار گرفته است. علاوه بر این با ذخیره دادهها در بانک داده MySql آشنا شدید. اما گاهی نیاز به نوع دیگری از ذخیره دادهها خواهید داشت. مثلا متغیرهایی که در تمام پروژه در دسترس باشند. از سشن (Session) و کوکی (Cookie) دقیقا به همین منظور در پیاچپی استفاده میکنیم. در ادامه با ما همراه باشید.
در برنامهنویسی وب بسیار پیش میآید که شما نیاز به ذخیره اطلاعات در متغیرهایی داشته باشید که در سراسر پروژه در دسترس باشند. در این شرایط میتوان از Sessionها و Cookieها استفاده کرد.
تفاوت Session و Cookie در آن است که سشنها در سرور ذخیره میشوند ولی کوکیها در دستگاه کاربر ذخیره خواهند شد.
استفاده از Session
برای استفاده از سشنها باید در ابتدای صفحه ابتدا آن را آغاز کنید. کد شروع یک سشن به صورت زیر است:
<?php
session_start();
?>
اما چگونه میتوانیم در سشنها اطلاعات مورد نظر را ذخیره کنیم. اگر مبحث آرایه را به یاد داشته باشید بخش سشنها نیز بیشباهت به آن نیست. فرض کنید قصد ایجاد یک سشن به نام user را داریم و میخواهیم مقدار آن را نیز برابر mojtaba قرار دهیم. پس باید کدی به شکل زیر بنویسیم:
<?php
session_start();
$_SESSION[‘user’] = “mojtaba”;
?>
همانطور که احتمالا حدس میزنید برای دسترسی به مقدار ذخیره شده در یک سشن کافی است نام آن را به شکل زیر مورد استفاده قرار دهیم. درست همانند آنچه در مورد روش دسترسی به اطلاعات آرایهها بکار میگرفتیم.
<?php
session_start();
$_SESSION[‘user’] = “mojtaba”;
echo $_SESSION[‘user’];
?>
کد بالا باعث نمایش کلمه mojtaba در مرورگر کاربر میشود. اما برای اینکه نوع عملکرد سشنها را بهتر درک کنید، یک مثال ساده میزنیم. نرمافزار Xampp را مثل همیشه اجرا کنید. حالا در پوشه htdocs یک پوشه به اسم exam ایجاد کرده و در این پوشه نیز دو فایل به نامهای yek.php و do.php بسازید. فایل yek.php را باز کرده و کد زیر را در آن قرار دهید:
<?php
session_start();
$_SESSION[‘isAdmin’] = true;
$_SESSION[‘username’] = “mehrastan”;
?>
حال فایل را ذخیره کنید و فایل do.php را باز کرده و کدهای زیر را در آن قرار دهید:
<?php
session_start();
if ($_SESSION[‘isAdmin’] == true){
echo “you are admin and your username is $_SESSION[‘username’]”;
}else{
echo “session is not set!”;
}
?>
پس از آغاز سشن، ما دو سشن جدید به نامهای isAdmin و username را در فایل yek.php ایجاد کردیم و مقدار آنها را به ترتیب true و mehrastan تعیین کردیم. دقت کنید که مقدار سشن isAdmin از نوع Boolean تعیین شده است. حال در فایل do.php پس از اجرای سشن با تابع ()session_start با یک دستور if مقدار سشن isAdmin را بررسی کردهایم که در صورت true بودن پیامی چاپ شود و در این پیام مقدار سشن username نیز به کاربر نمایش داده میشود. در غیر اینصورت پیام session is not set به کاربر نمایش داده میشود.
همانطور که میبینید ما سشنها را در فایل yek.php ایجاد کردیم ولی توانستیم در فایل do.php نیز به آنها دسترسی داشته باشیم.
روش کارکرد کوکیها نیز تقریبا به همین صورت است با این تفاوت که کوکیها در سرور ذخیره نخواهند شد و در عوض در سیستم کاربران ذخیره و در مواقع نیاز از طریق مرورگر فراخوانی میشوند. از کوکیها بیشتر به منظور شناسایی کاربران استفاده میکنیم. با استفاده از پیاچپی میتوانیم کوکیهای جدید را ایجاد و مقداردهی و نیز فراخوانی کنیم.
برای تعریف یک کوکی جدید از تابع setcookie استفاده میکنیم. به کد زیر دقت کنید:
<?php
setcoockie(name, value, expire, path, domain, secure, httponly);
?>
برخی از ورودیهای تابع فوق الزامی و برخی دیگر اختیاری هستند. در ادامه به توضیح ورودیهای این تابع میپردازیم.
name: نام کوکی جدید که قصد تعریف آن را داریم
value: مقداری که میخواهیم در کوکی موردنظرمان ذخیره شود
expire: مدت زمانی که کوکی پس از آن منقضی خواهد شد (بر حسب ثانیه)
path: تعیین مسیر ذخیره کوکی در سرور
domain: تعیین اینکه کوکی در چه دامینی در دسترس باشد
secure: تعیین اینکه آیا کوکی فقط در ارتباطات امن در دسترس باشد یا خیر
httponly: اگر این مقدار true باشد کوکی فقط از طریق http در دسترس خواهد بود
در کد زیر یک کوکی جدید به نام name میسازیم و مقدار آن را برابر با Mojtaba قرار میدهیم. همچنین زمان انقضای این کوکی را ۳۰ روز میخواهیم تعیین کنیم و بنابراین ۸۴۰۰۰ ثانیه را در ۳۰ ضرب کرده و نتیجه را برای زمان انقضا در نظر گرفتهایم. کاراکتر / به معنای در دسترس بودن کوکی در سراسر دامین است. برای دسترسی به مقدار کوکی همانند سشنها از COOKIE_$ استفاده کردهایم.
<?php
$value = “Mojtaba”;
setcoockie (“user”, $value, time() + (86400 * 30), ‘/’);
if (isset($_COOKIE[‘user’])
{
echo “cookie is set and this cookie is: $_COOKIE[‘user’]”;
}
?>
در کد بالا تابع isset را در شرط if بکار بردهایم. این تابع بررسی میکند که آیا آنچه قصد بررسیاش را داریم حاوی مقدار است یا خیر. همچنین تابع time زمان کنونی سرور را برمیگرداند.
نکته مهم در مورد استفاده از تابع setcoockie این است که باید حتما پیش از تگ <html> از آن استفاده کنید. مقادر ذخیره شده در کوکیها به صورت رمزنگاری شده درمیآیند و هنگام فراخوانی مجددا به صورت خودکار از حالت رمزنگاری شده خارج میشوند. با این وجود هیچگاه برای ذخیرهسازی اطلاعات مهم از کوکیها استفاده نکنید.
از سشنها و کوکیها برای هویتسنجی کاربران میتوان استفاده کرد. تقریبا میتوان گفت که بیشتر سایتهایی که با پیاچپی ایجاد شدهاند، از کوکی و سشن یا ترکیبی از این دو برای بخش ورود کاربران، ورود به بخش مدیریت سیستم و… استفاده میکنند.
در جلسه بعد قصد داریم cms نوشته و جلسات قبل را ارتقا دهیم و بخشی برای ورود مدیر ایجاد کنیم که از آن طریق بتوان فقط در صورتی که نام کاربری و رمزعبور مربوطه را داریم اقدام به ارسال مطلب و دسترسی به بخشهای مدیریت داشته باشیم.