آموزش PHP - جلسه شانزدهم: 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'] = "zoomit";
?>
حال فایل را ذخیره کنید و فایل 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 و zoomit تعیین کردیم. دقت کنید که مقدار سشن 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 نوشته در جلسات قبل را ارتقا دهیم و بخشی برای ورود مدیر ایجاد کنیم که از آن طریق بتوان فقط در صورتی که نام کاربری و رمزعبور مربوطه را داریم اقدام به ارسال مطلب و دسترسی به بخشهای مدیریت داشته باشیم.