آموزش کار با Cookie در زبان PHP


۲۳ شهریور ۱۳۹۹
کار با cookie در زبان php

Cookie در برنامه‌های PHP، یک فایل با حداکثر اندازه 4KB است که توسط سرور بر روی کامپیوتر کاربر ذخیره می‌شود. در این مقاله چگونگی ساخت و فراخوانی Cookie یا تغییر مقادیر موجود در آن را آموزش خواهد دید. مواردی که در این مقاله به آنها می‌پردازیم به شرح زیر هستند:

  1. Cookie چیست؟
  2. ساخت Cookie
  3. فراخوانی مقادیر Cookie
  4. تغییر مقدار تعریف شده در Cookie
  5. حذف Cookie
  6. Session چیست؟

Cookie چیست؟

همان‌طور که در ابتدای مقاله اشاره کردیم، Cookie یک فایل کوچک با حداکثر اندازه 4KB است که توسط سرور در کامپیوتر ما ساخته می‌شود و اغلب برای شناسایی کاربر مورد استفاده قرار می‌گیرد. هر زمان که درخواستی توسط مرورگر کامپیوتر ما به یکی از صفحه‌های موجود در سرور ارسال شود، فایل Cookie مرتبط با آن سرور نیز علاوه بر درخواست به سمت سرور ارسال می‌شود. ما به کمک زبان PHP می‌توانیم Cookie بسازیم و همچنین مقادیر موجود در آن Cookie را فراخوانی و استفاده کنیم، بنابراین می‌توانیم بگوییم که زبان PHP کاملا از Cookieها پشتیبانی می‌کند.

در شناسایی کاربران توسط Cookie سه مرحله وجود دارد:

  1. سرور مجموعه‌ای از Cookieها را به مرورگر کاربر ارسال می‌کند.
  2. مرورگر اطلاعات دریافت شده را برای استفاده‌های بعدی در خود ذخیره می‌کند.
  3. در دفعات بعد، هنگامی که کاربر درخواستی را به آن وب‌سرور ارسال کند، اطلاعات Cookie هم به سرور ارسال می‌شوند و به همین طریق، سرور از آن اطلاعات برای شناسایی کاربر استفاده می‌کند.
چگونگی کارکرد coockieها مابین کاربر و سرور

ساخت Cookie

در زبان PHP توسط تابع setcookie()، می‌توانیم Cookie مورد نظر خود را ایجاد کنیم. این تابع حداکثر شِش آرگومان دریافت می‌کند و البته باید افزود که برای ساخت هر Cookie، نیاز است این تابع به‌صورت جداگانه فراخوانی شود.

سینتکس تابع setcookie():

<?php
setcookie(Name, Value, [Expiry_Time], [Cookie_Path], [Domain], [Secure]);
?>
  1. مقدار Name اجباری است زیرا برای فراخوانی اطلاعات موجود که با این نام در آرایه $_COOKIE ذخیره شده‌اند، به مقدار Name نیاز خواهیم داشت.
  2. مقداردهی Value هم اجباری است. این مقدار دقیقا همان اطلاعاتی هستند که شما می‌خواهید آنها را در Cookie ذخیره کنید.
  3. [Expiry_Time] اختیاری است و برای تعریف زمان انقضای Cookie مورد استفاده قرار می‌گیرد. برای مقداردهی این مورد می‌توانید از تابع time() در زبان PHP استفاده کنید. برای مثال اگر بخواهید تاریخ انقضای Cookie را یک ساعت بعد از ساخت آن قرار دهید، می‌توانید به این صورت عمل کنید (time() + 3600). تاریخ انقضای پیش‌فرض برای هر Cookie، سی (30) دقیقه است.
  4. [Cookie_Path] نیز اختیاری است و برای تعیین مسیر Cookie در سرور استفاده می‌شود، مثلا / به این معناست که Cookie در تمام دامنه در دسترس خواهد بود. اگر شما این مقدار را برابر با subdirectoryها قرار دهید، دسترسی به Cookieها محدود به ساب‌دامنه‌ها می‌شود.
  5. [Domain] اختیاری است. از این مورد برای تعیین نام دامنه‌ای که Cookie بر روی آن قابل دسترس باشد، استفاده می‌کنند. تمام Cookieها فقط برای هاست و دامنه‌ای که در آن ایجاد شده‌اند، معتبر هستند. اگر شما این آرگومان را برابر با www.example.com قراردهید، Cookieها فقط در این ساب‌دامنه و تمام ساب‌دامنه‌های این ساب‌دامنه مانند w2.www.example.com در دسترس خواهند بود ولی اگر آن را برابر با example.com قراردهید، می‌توانید در تمام بخش‌های سایت به Cookieها دسترسی داشته باشید.
  6. [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";
?>
ساخت cookie با تابع setcookie() در زبان php
فایل cookie.php

حال یک فایل دیگر با نام view_cookie.php ایجاد کرده و بیایید مقدار موجود در Cookie را فراخوانی کنیم، برای این کار نیاز است از آرایه $_COOKIE استفاده شود.

<?php
$actor_name = $_COOKIE['actor_name'];
$actor_age = $_COOKIE['age'];
echo "$actor_name";
echo "$actor_age";
?>
بازیابی مقادیر موجود در آرایه $_COOKIE
فایل view_cookie.php

تغییر مقادیر تعریف شده در 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! چاپ خواهد شد.

تغییر مقدار cookie در زبان php

یک بار صفحه را 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";
?>
حذف cookie در زبان php

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

برچسب‌ها:

خدمات رایگان لیارا

۲.۵ گیگابایت فضای ذخیره‌سازی ابری رایگان

۲.۵ گیگابایت Object Storage سازگار با پروتکل S3 با دیسک‌های SSD به‌صورت رایگان دریافت کنید.

هاست رایگان برای دیتابیس‌

دیتابیس‌های MariaDB، PostgreSQL و Redis را فقط با یک کلیک و به‌صورت رایگان تهیه کنید.

سرویس DNS رایگان

به سادگی دامنه‌تان را اضافه کنید و به صورت رایگان رکورد‌های آن را مدیریت کنید.

۱۰۰ هزار تومان اعتبار اولیه

بعد از ثبت نام در لیارا مبلغ ۱۰۰ هزار تومان اعتبار هدیه دریافت می‌کنید که با توجه به ساعتی بودن هزینه سرویس‌ها، می‌توانید تمامی خدمات پولی را برای چندین هفته رایگان استفاده کنید.

ارسال ۱۰۰ ایمیل تراکنشی رایگان در هر ماه

در سرویس ایمیل لیارا شما می‌توانید تا ۱۰۰ ایمیل رایگان در هر ماه ارسال کنید و فقط برای بیش از آن هزینه پرداخت کنید. (به‌همراه دسترسی SMTP)

هاست رایگان برای انواع وبسایت

تفاوتی ندارد برای وبسایت خود از Node استفاده می‌کنید یا Laravel و Django، در لیارا می‌توانید به صورت کاملا رایگان آن را میزبانی کنید.

توسعه‌دهندگان درباره‌ی ما چه می‌گویند

تجربه کار باliara_cloud@امروز خیلی خوب بود. یکی از سرویس هام رو منتقل کردم روش و راضیم. انقد سریع و جذاب کارم راه افتادم اصن باورم نمیشد! برعکس سرویس های PaaS دیگه با اون همه پیچیدگیشون. دمتون گرم
...

MohammadReza
liara testimonial
keikaavousi

بعد از بسته شدن @fandoghpaas و ناراحتی همه‌مون از اینکه یه سرویس خوب و صادق نمی‌تونه از پس هزینه‌ها بر بیاد، سرویسم رو منتقل کردم به پاس لیارا (https://liara.ir @liara_cloud) . تجربه راحت و خوب. تفاوت‌هایی داشت که کمی کار می‌خواست ولی تا الان کاملا راضی.

jadi
liara testimonial
jadi

یه خسته نباشید باید به تصمیمliara_cloud@بگم،
بعد از چندین روز سرکله زدن با سرویس های مشابه بالاخره تصمیم گرفتم لیارا رو امتحان کنم و باور نمیشه ۱۰ دقیقه بیشتر وقت نبرد،
دمتون گرم.

Arch
liara testimonial
EbadiDev

واسه سرویس PaaS با اختلاف لیارا بهترین رابط کاربری داره و یکی از مزیت‌های سرویس دیتابیس‌شون اینه که خودشون به صورت دوره‌ای بکآپ میگیرن.
...

Ali Najafi
liara testimonial
me_ali_najafi

یکی از کارهای خوبی که جدیداً میکنم اینه که یه دیتابیس روی لیارا میسازم و به پروژه وصل میکنم اینطوری هم خونه و هم محل کار دیتابیس بروز رو دارم و راحت میتونم ادامه بدم کار روliara_cloud@

Navid
liara testimonial
1navid

عاشقliara_cloud@شدم درسته در حد AWS نیست ولی خب تجربه خوبی واسه پروژه های داخل ایران ارائه میده، میتونم رو CD هم اجراش کنم

Amir H Shekari
liara testimonial
vanenshi

همراه شما هستیم

در خصوص سفارش یا استفاده از سرویس‌ها سوالی دارید؟
تلفن واحد فروش:
۰۲۵-۳۳۵۵۷۶۱۹ (روزهای کاری ۹ الی ۱۷)
تلفن واحد فروش: ۳۳۵۵۷۶۱۹-۰۲۵ (روزهای کاری ۹ الی ۱۷)