کوکی یا cookie چیست ؟ 

تصور کنید هنگامی که وارد یک وبسایت چند زبانه می شوید و از بین زبان های پیشنهادی زبان فارسی را انتخاب می کنید. سپس در زمان های آینده هنگامی که مجددا به وبسایت یاد شده مراجعه میکنید متوجه میشوید که مرورگر شما را به نوعی شناسایی می کند و زبان فارسی را از پیش انتخاب می کند. مثالی دیگر: فرض کنید در وبسایتی از قبل ثبت نام کرده اید و حال لاگین می کنید و دکمه " مرابه خاطر بسپار" را تیک می زنید. در مراجعات بعدی متوجه می شوید که مرورگر شما را به صورت خودکار لاگین کرده و نیازی به وارد کردن نام کاربری یا رمز عبور ندارید. تمام موارد مشابه با این مثال ها توسط کوکی ها در برنامه نویسی پیاده  سازی می شوند. 
کوکی در انگلیسی به معنای کلوچه یا شیرینی و در برنامه نویسی به اطلاعاتی گفته می شود که از پیش روی کامپیوتر کاربر داخل یک فایل متنی ذخیره شده و در مواقع مورد نیاز در قالب کلوچه های اطلاعاتی به سمت سرور فرستاده می شود.
از آنجا که پروتکل HTTP  پروتکلی بدون وضعیت هست و در درخواست های بعدی، طرفین قادر به شناسایی یکدیگر نیستند، مکانیزمی به نام کوکی روی این پروتکل اضافه شد. 
یکی از تفاوت های اصلی کوکی ها و session ها در همین مورد است که کوکی ها در کامپیوتر کاربر ذخیره می شوند ولی session ها در سرور ذخیره می شوند. 
پس روند کار به این صورت است که ابتدا و برای اولین بار سرور اطلاعات مربوط به کوکی را به مرورگر ارسال می کند و سپس مروگر همان اطلاعات را گرفته و ذخیره می کند. بعد از آن هرگاه از همان سایت درخواستی به سرور ارسال شد مرورگر کوکی ذخیره شده را به سرور ارسال و سرور با توجه به پارامترهایی مانند  مسیر ، زمان انقضا و ... کوکی را اعتبار سنجی می کند.
بنابراین روند ذکر شده در بالا به صورت مختصر این چنین بیان می شود: 

  • سرور اطلاعات کوکی را به سمت کاربر ارسال می کند
  • مرورگر اطلاعات کوکی را پس از دریافت روی کامپیوتر کاربر برای استفاده در آینده ذخیره می کند
  • در درخواست های آینده ، مرورگر اطلاعات کوکی از قبل ذخیره شده را به سمت سرور می فرستد و سرور برای شناسایی کاربر و تنظیمات دیگر از آن استفاده می نماید.  

کوکی ها  در php 

کوکی ها در php توسط تابع setcookie تولید می شوند. این تابع 6 پارامتر به شرح زیر می پذیرد :

setcookie(name, value, expire, path, domain, security);

توجه داشته باشید که این تابع حتما بایستی قبل از تگ <html> قرار بگیرد.  از میان پارامترهای این تابع فقط پارامتر name اجباری می باشد و بقیه پارامترها به صورت اختیاری می باشند. 
اگر بخواهیم مختصر توضیحی درباره پارامترهای ذکر شده داشته باشیم به صورت زیر تعریف می کنیم :

  • پارامتر name : برای نام گذاری کوکی از این پارامتر استفاده می  شود.
  • پارمتر value : این پارامتر مقداری را برای کوکی تعیین می کند که این مقدار مستقیما بر روی کامپیوتر ذخیره می شود. 
  • پارامتر expire : این پارمتر کوکی را در زمان مشخصی به ثانیه منقضی و از بین می برد. اگر این پارامتر انتخاب نشود پس از بستن پنجره کوکی از بین می رود. معمولا از تابه time() برای تعیین زمان انقضای کوکی استفاده می شود. 
  • پارامتر path : توسط این پارامتر مسیری معتبر برای دسترسی به کوکی ها را جهت ذخیره و بازیابی مشخص می کنیم. با قرار دادن یک علامت “/” اسلش اجازه دسترسی به شاخه و زیر شاخه های فقط آن دایرکتوری برای کوکی صادر می شود. 
  • پارمتر domain : این پارامتر دامنه ای که کوکی بر روی آن قابل دسترسی است را تعیین می کند. 
  • پارمتر security : اگر مقدار این پارامتر 1 باشد کوکی حتما باید با پروتکل https ارسال شود. در غیر این صورت مقدار آن برابر 0 خواهد بود که این بدان معنی می باشد که کوکی فقط روی پروتکل http معمولی تنظیم می شود. 

در مثال زیر 3 کوکی برای مشخصاتی چون نام ، محل تولد و شغل یک فرد تولید می کنیم . 

<?php
   setcookie("name", "Hesam Alizadeh", time()+3600, "/","", 0);
   setcookie("city", "Tehran", time()+3600, "/", "",  0);
   setcookie("Job", "Web Developers", time()+3600, "/", "",  0);
?>
<html>   
   <head>
      <title>PHP Cookies</title>
   </head>
   
   <body>
      <?php echo "Set Cookies"?>
   </body>
   
</html>

دسترسی به کوکی در php

راحت ترین راه برای دسترسی به کوکی تولید شده در php  استفاده از دو متغیر $_COOKIE یا $HTTP_COOKIE_VARS می باشد.

<?php
         echo $_COOKIE["name"]. "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "<br />";
         
         echo $_COOKIE["city"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["city"] . "<br />";

         echo $_COOKIE["job"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["job"] . "<br />";
 ?>

حذف یک کوکی در php 

برای حذف یک کوکی از تابع setcookie() استفاده می کنیم. این تابع نام کوکی مورد نظر دریافت و آن را حذف می کند. اما گاهی اوقات این پروسه به خوبی عمل نمی کند و نمی توان گفت که این روش روشی مطمئن برای حذف کوکی می باشد. پس چه باید کرد. در اینجا می توانیم توسط همان تابع سازنده کوکی اقدام ه حذف کوکی های ساخته شده کنیم. فقط کافی ست که همان کوکی را بسازیم ولی زمان انقضای آن را به تاریخ قبل از شروع ببریم. به این صورت: 
 

<?php
   setcookie( "name", "", time()- 60, "/","", 0);
   setcookie( "city", "", time()- 60, "/","", 0);
   setcookie( "job", "", time()- 60, "/","", 0);
?>
<html>
   
   <head>
      <title>Deleting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Deleted Cookies" ?>
   </body>
   
</html>

 

آیا این پاسخ به شما کمک کرد؟ 312 کاربر این را مفید یافتند (312 نظرات)