تغییرات اخیر

در اینجا اطلاعیه‌ها، نسخه‌ها و تغییرات جدید لیارا فهرست می‌شوند.

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


۲۳ شهریور ۱۳۹۹

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

همین الان، بدون کمترین پیچیدگی، پروژه PHP خودتون رو در کمتر از ۳۰ ثانیه، روی سرور اجرا کنید.
✅ بدون نیاز به تنظیمات ✅ استقرار آسان با مرورگر یا CLI ✅ مخصوص پروژه‌های PHP
خرید هاست PHP ابری

آنچه در ادامه خواهید خواند:

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

Cookie چیست؟

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

معرفی هاست رایگان PHP
هاست رایگان PHP

در شناسایی کاربران توسط 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 است.
آموزش نصب PHP
نصب PHP

فراخوانی مقادیر 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 قرار دهیم.

بهینه‌سازی عملکرد برنامه‌های PHP
برنامه‌های PHP

سوالات متداول

در ادامه به سوالاتی که امکان دارد در این زمینه برای شما بدون پاسخ بماند، جواب‌های کوتاه اما مفیدی داده‌ایم که با استفاده از آن می‌توانید به سوال خود پاسخ صحیحی را بدهید.

تفاوت اصلی Cookie و Session در PHP چیست؟

Cookie روی مرورگر کاربر ذخیره می‌شود و حجم محدودی (حداکثر ۴KB) دارد، در حالی که Session در سمت سرور ذخیره می‌شود و امنیت بیشتری دارد چون در دسترس کاربر نیست.

چگونه می‌ توان یک Cookie را در PHP حذف کرد؟

برای حذف یک Cookie فقط کافی است زمان انقضای آن را به گذشته نسبت دهیم، مثلا:

phpCopyEditsetcookie("actor_name", "", time() - 3600);

آیا می‌ توان اطلاعات مختلفی را در یک Cookie ذخیره کرد؟

خیر، هر Cookie فقط یک مقدار را نگه می‌دارد. برای ذخیره چند مقدار مختلف، باید چند Cookie با نام‌های متفاوت بسازید.

چه زمانی از Cookie و چه زمانی از Session استفاده کنیم؟

از Cookie برای ذخیره اطلاعات ساده که باید در مرورگر باقی بمانند استفاده می‌شود (مثلاً ذخیره نام کاربری)، ولی برای داده‌های حساس یا بزرگ، بهتر است از Session استفاده شود که روی سرور ذخیره می‌شود.

آیا می‌توان از Cookieها برای احراز هویت استفاده کرد؟

بله، ولی بهتر است تنها به آن‌ها اکتفا نکنید و در کنار آن از Session یا توکن‌های امنیتی (Security Tokens) نیز استفاده کنید، چون Cookie ها در معرض خطراتی مانند دستکاری یا سرقت هستند.

آینده زبان برنامه‌نویسی PHP
زبان برنامه‌نویسی PHP

جمع بندی

Cookie فایل کوچکی است که روی مرورگر کاربر ذخیره می‌شود و با تابع setcookie() ساخته، تغییر یا حذف می‌شود. داده‌های Cookie با آرایه‌ی $_COOKIE قابل دسترسی‌اند. Session اما اطلاعات را امن روی سرور نگه می‌دارد و برای هر کاربر شناسه منحصربه‌فردی می‌سازد، که برای ذخیره داده‌های حساس یا مدیریت وضعیت کاربر بهتر است.
اگر اطلاعات موقتی و ساده می‌خواهید، Cookie مناسب است و برای داده‌های مهم‌تر، Session استفاده کنید.

منبع: https://www.edureka.co/blog/php-cookies

به اشتراک بگذارید

برچسب‌ها: