آموزش کار با Cookie در زبان PHP
۲۳ شهریور ۱۳۹۹
Cookie در برنامههای PHP، یک فایل با حداکثر اندازه 4KB است که توسط سرور بر روی کامپیوتر کاربر ذخیره میشود. در این مقاله چگونگی ساخت و فراخوانی Cookie یا تغییر مقادیر موجود در آن را آموزش خواهد دید. مواردی که در این مقاله به آنها میپردازیم به شرح زیر هستند:
- Cookie چیست؟
- ساخت Cookie
- فراخوانی مقادیر Cookie
- تغییر مقدار تعریف شده در Cookie
- حذف Cookie
- Session چیست؟
Cookie چیست؟
همانطور که در ابتدای مقاله اشاره کردیم، Cookie یک فایل کوچک با حداکثر اندازه 4KB است که توسط سرور در کامپیوتر ما ساخته میشود و اغلب برای شناسایی کاربر مورد استفاده قرار میگیرد. هر زمان که درخواستی توسط مرورگر کامپیوتر ما به یکی از صفحههای موجود در سرور ارسال شود، فایل Cookie مرتبط با آن سرور نیز علاوه بر درخواست به سمت سرور ارسال میشود. ما به کمک زبان PHP میتوانیم Cookie بسازیم و همچنین مقادیر موجود در آن Cookie را فراخوانی و استفاده کنیم، بنابراین میتوانیم بگوییم که زبان PHP کاملا از Cookieها پشتیبانی میکند.
در شناسایی کاربران توسط Cookie سه مرحله وجود دارد:
- سرور مجموعهای از Cookieها را به مرورگر کاربر ارسال میکند.
- مرورگر اطلاعات دریافت شده را برای استفادههای بعدی در خود ذخیره میکند.
- در دفعات بعد، هنگامی که کاربر درخواستی را به آن وبسرور ارسال کند، اطلاعات Cookie هم به سرور ارسال میشوند و به همین طریق، سرور از آن اطلاعات برای شناسایی کاربر استفاده میکند.
ساخت Cookie
در زبان PHP توسط تابع setcookie()
، میتوانیم Cookie مورد نظر خود را ایجاد کنیم. این تابع حداکثر شِش آرگومان دریافت میکند و البته باید افزود که برای ساخت هر Cookie، نیاز است این تابع بهصورت جداگانه فراخوانی شود.
سینتکس تابع setcookie()
:
<?php
setcookie(Name, Value, [Expiry_Time], [Cookie_Path], [Domain], [Secure]);
?>
- مقدار Name اجباری است زیرا برای فراخوانی اطلاعات موجود که با این نام در آرایه
$_COOKIE
ذخیره شدهاند، به مقدار Name نیاز خواهیم داشت. - مقداردهی Value هم اجباری است. این مقدار دقیقا همان اطلاعاتی هستند که شما میخواهید آنها را در Cookie ذخیره کنید.
- [Expiry_Time] اختیاری است و برای تعریف زمان انقضای Cookie مورد استفاده قرار میگیرد. برای مقداردهی این مورد میتوانید از تابع
time()
در زبان PHP استفاده کنید. برای مثال اگر بخواهید تاریخ انقضای Cookie را یک ساعت بعد از ساخت آن قرار دهید، میتوانید به این صورت عمل کنید (time() + 3600
). تاریخ انقضای پیشفرض برای هر Cookie، سی (30) دقیقه است. - [Cookie_Path] نیز اختیاری است و برای تعیین مسیر Cookie در سرور استفاده میشود، مثلا
/
به این معناست که Cookie در تمام دامنه در دسترس خواهد بود. اگر شما این مقدار را برابر با subdirectoryها قرار دهید، دسترسی به Cookieها محدود به سابدامنهها میشود. - [Domain] اختیاری است. از این مورد برای تعیین نام دامنهای که Cookie بر روی آن قابل دسترس باشد، استفاده میکنند. تمام Cookieها فقط برای هاست و دامنهای که در آن ایجاد شدهاند، معتبر هستند. اگر شما این آرگومان را برابر با
www.example.com
قراردهید، Cookieها فقط در این سابدامنه و تمام سابدامنههای این سابدامنه مانندw2.www.example.com
در دسترس خواهند بود ولی اگر آن را برابر باexample.com
قراردهید، میتوانید در تمام بخشهای سایت به Cookieها دسترسی داشته باشید. - [Secure] اختیاری است. اگر بخواهید تعیین کنید که Cookie از طریق پروتکل ایمن HTTPS ارسال شود باید این مورد را true قراردهید و یا برای ارسال Cookie از طریق پروتکل HTTP این مورد باید false باشد که بهصورت پیشفرض نیز false است.
فراخوانی مقادیر Cookie
یک فایل با نام cookie.php ایجاد کنید و قطعه کد زیر را در آن قرار دهید:
<?php
//setcookie(name, value, expire);
setcookie('actor_name', 'joaquin phoenix', time()+30);
setcookie('age', '44', time()+30);
echo "The cookie has been set for 30 seconds";
?>
حال یک فایل دیگر با نام view_cookie.php ایجاد کرده و بیایید مقدار موجود در Cookie را فراخوانی کنیم، برای این کار نیاز است از آرایه $_COOKIE
استفاده شود.
<?php
$actor_name = $_COOKIE['actor_name'];
$actor_age = $_COOKIE['age'];
echo "$actor_name";
echo "$actor_age";
?>
تغییر مقادیر تعریف شده در Cookie
برای تغییر مقدار یک Cookie فقط لازم است با تابع setcookie()
مجددا با همان Name قبلی، مقدار جدید را وارد کنیم.
<?php
$cookie_name = "actor_name";
setcookie('actor_name', 'robert de niro', time()+30);
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named ' . $cookie_name . ' is not set!";
} else {
echo "Cookie '" . $cookie_name . "' is set! "; echo "actor name is: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>
هنگامی که برای اولین بار صفحه را توسط مرورگر باز کنیم، پیام Cookie named ‘actor_name’ is not set!
چاپ خواهد شد.
یک بار صفحه را refresh کنید تا Cookie که ثبت شده به شما نشان داده شود.
حذف Cookie
برای حذف یک Cookie میتوان به سادگی از تابع setcookie()
استفاده کرده و زمان انقضای Cookie را برابر با گذشته قرار دهیم. مثلا در کد زیر، تاریخ انقضای Cookie را یک ساعت قبل از زمان فعلی قرار دادهایم.
<?php
$cookie_name = "actor_name";
setcookie('actor_name', 'robert de niro', time()-3600);
echo "Cookie named '" . $cookie_name . "' is deleted";
?>
Session چیست؟
در یک سایت ساده که فقط در آن از HTML استفاده شده، نمیتوانیم دادهها را بین صفحههای مختلف انتقال دهیم. بهعبارت دیگر، هنگام بارگیری یک صفحه جدید، تمام اطلاعات از بین میروند. Session این امکان را برای ما فراهم آورده تا بتوانیم اطلاعات را در سرور ذخیره کرده و بعدا از آن استفاده کنیم.
یک session بهعنوان یک متغیر سراسری یا global در سرور تعریف میشود و هرکدام از آنها دارای یک شناسه منحصربهفرد هستند که برای فراخوانی مقادیر ذخیره شده در سرور، استفاده میشوند. هرگاه که session ساخته شود، یک Cookie حاوی شناسه آن session در سیستم کاربر ذخیره شده و در هر درخواست برای سرور ارسال میشود. در مرورگرهایی که از Cookieها پشتیبانی نمیکنند، آن شناسه در URL با عنوان session-id نمایش داده میشود. در sessionها میتوان دادههای نسبتا زیادی را در مقایسه با Cookieها ذخیره کرد البته با بسته شدن مرورگر، مقادیر موجود در session بهصورت خودکار حذف میشوند. برای ذخیره دائمی اطلاعات، باید دادههای مورد نظر را در دیتابیس ذخیره کنیم. مشابه آرایه $_COOKIE
، مقادیر session در آرایه $_SESSION
ذخیره میشوند، علاوهبراینها باید Sessionها را قبل از تگهای HTML قرار دهیم.
امیدوارم از این مقاله لذت برده باشید و با تمرین آموزشهای موجود، آنها را بهخوبی درک کنید.
منبع: https://www.edureka.co/blog/php-cookies
همچنین بخوانید: معرفی هاست رایگان PHP
توسعهدهندگان دربارهی ما چه میگویند
تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...
MohammadReza
keikaavousi
بعد از بسته شدن @fandoghpaas و ناراحتی همهمون از اینکه یه سرویس خوب و صادق نمیتونه از پس هزینهها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوتهایی داشت که کمی کار میخواست ولی تا الان کاملا راضی.
jadi
jadi
یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.
Arch
EbadiDev
واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیتهای سرویس دیتابیسشون اینه که خودشون به صورت دورهای بکآپ میگیرن.
...
Ali Najafi
me_ali_najafi
یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@
Navid
1navid
عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم
Amir H Shekari
vanenshi