کوکی ها در php

آموزش کار با کوکی ها در php

کوکی ها در php فایل های متنی هستند که در کامپیوتر مقصد یا کاربر ( client side ) ذخیره میشوند که برای اهداف بعدی نگهداری میشوند. 

زبان php بطور شفاف از کوکی ها پشتیبانی میکند . 

برای ساخت و استفاده از کوکی ها اتفاقات زیر به ترتیب انجام میگیرد: 

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

در این درس یاد میگیریم چطور کوکی ایجاد کنیم ، از کوکی ها استفاده کنیم و آنها را پاک کنیم . 

 

اسکلت بندی کوکی ها در php 

کوکی ها در پی اچ پی معمولا در header پروتکل HTTP قرار میگیرند . یک اسکریپت php که از کوکی ها استفاده میکند و آنها را ایجاد میکند باید در هدر محتوای مثل کدهای زیر را قرار دهد : 

HTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/htmlHTTP/1.1 200 OK
Date: Fri, 04 Feb 2000 21:03:38 GMT
Server: Apache/1.3.9 (UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday, 04-Feb-07 22:03:38 GMT; 
                 path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/html

همانطور که میبینید بخش Set-Cookie از چند نام / مقدار تشکیل شده است . یک زمان به GMT  یک مسیر و یک دامنه . 

نام و مقدار ها بصورت URL encoded رمزگذاری میشوند . 

مقدار expires به مرورگر یک دستورالعملی میدهد تا مرورگر مطلع شود چه زمانی باید کوکی ها را فراموش کند . 

اگر مرورگر تنظیم شده باشد تا کوکی ها را ذخیره کند ، تا زمانی که آنها منقضی نشده باشند آنها را ذخیره و نگهداری خواهد کرد . 

کاربر اگر به هر یک از صفحات سایت درخواست ارسال کند و در کوکی ها مقدار domain با آن برابر باشد دوباره آن کوکی ها به سمت سرور ارسال میشود . 

مقدار header مرورگر باید مشابه زیر باشد :

GET / HTTP/1.0
Connection: Keep-Alive
User-Agent: Mozilla/4.6 (X11; I; Linux 2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif, */*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz

 

سپس اسکریپت php به کوکی ها دسترسی خواهد داشت و برای دسترسی به کوکی ها باید از متغیرهای محیطی php که $_COOKIE or $HTTP_COOKIE_VARS[] هستند استفاده کرد . 

 

ساخت کوکی در php

 زبان برنامه نویسی php یک تابع به نام setcookie دارد که کوکی ها را ایجاد و تنظیم میکند . این تابع شش عدد پارامتر ورودی دارد و باید قبل از تگ <html> استفاده شود . 

سینتکس استفاده از این تابع :

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

در زیر جزئیات تمام آرگومان های ورودی تابع setcookie آمده است : 

  • Name : نام کوکی میباشد و در یک متغیر محیطی با نام HTTP_COOKIE_VARS نگهداری میشود . این متغیر زمانی استفاده میشود که یک کوکی را صدا میزنیم 
  • Value : اطلاعات موجود برای هر نام که در کوکی ها ذخیره میشود یا همان مقدار نام ها  .
  • Expiry : این آرگومان تاریخ از بین رفتن کوکی است که تا ثانیه حساب میکند و بصورت 00:00:00 GMT از  Jan 1970 . بعد از تاریخ انقضای اعلام شده کوکی غیرقابل دسترسی خواهد بود اگر این پارامتر تعریف نشود زمانی که مرورگر بسته میشود کوکی مقضی میشود و از بین میرود . 
  • Path : یک پارارمتر اختیاری است که مسیر یا دایرکتوری کوکی را مشخص میکند اگر "/" قرار بگیرد همیشه در دسترس خواهد بود ولی اگر "/php/" تعریف شود دایرکتوری php و تمام زیر پوشه های آن در دسترس خواهند بود . 
  • Domain : نام دامنه ای که کوکی برای آن قابل دسترسی باشد را مشخص میکند مثلا اگر شما دامنه را web.com تعریف کنید در دامنه ی web.com و زیر دامنه های آن قابل دسترسی خواهد بود . 
  • Security  : یک پارامتر اختیاری است اگر مقدار 1 به آن بدهید فقط در پروتکل های ایمن شده https در دسترس خواهد بود در غیر این صورت اگر 0 وارد کنید در http عادی ایمن نشده هم در دسترس خواهد بود و بصورت پیشفرض این مورد 0 است .

در مثال زیر یک کوکی میسازیم که name و age را نگهداری میکند این کوکی بعد از یک ساعت منقضی خواهد شد : 

<?php
   setcookie("name", "John Watkin", time()+3600, "/","", 0);
   setcookie("age", "36", time()+3600, "/", "",  0);
?>
<html>
   
   <head>
      <title>Setting Cookies with PHP</title>
   </head>
   
   <body>
      <?php echo "Set Cookies"?>
   </body>
   
</html>

 

دسترسی به Cookie ها در php

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

در مثال زیر به تمام کوکی هایی که در مثال بالا ایجاد کردیم میتوانیم دسترسی داشته باشیم :

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         echo $_COOKIE["name"]. "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["name"]. "<br />";
         
         echo $_COOKIE["age"] . "<br />";
         
         /* is equivalent to */
         echo $HTTP_COOKIE_VARS["age"] . "<br />";
      ?>
      
   </body>
</html>

 

برای اینکه مطمئن شوید یک کوکی ایجاد و مقدار دهی شده است یا نه میتوانید از تابع isset استفاده کنید که در درس های پیش تر هم درباره ی این تابع صحبت کردیم .

مثال : 

<html>
   
   <head>
      <title>Accessing Cookies with PHP</title>
   </head>
   
   <body>
      
      <?php
         if( isset($_COOKIE["name"]))
            echo "Welcome " . $_COOKIE["name"] . "<br />";
         
         else
            echo "Sorry... Not recognized" . "<br />";
      ?>
      
   </body>
</html>

 

حذف کردن کوکی ها در php 

در زبان برنامه نویسی php بصورت رسمی برای پاک کردن یک کوکی شما باید نام آن کوکی را با تابع setcookie صدا بزنید ولی این روش همیشه کار نمیکند و نباید به این روش به تنهائی تکیه کرد .

بهترین روش این است که یک تاریخ گذشته برای این کوکی ها در نظر بگیریم تا پاک شوند :

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

نکته : شما در حال یادگیری زبان php هستید. حتما در نظر داشته باشید که اکثر فریمورک های زبان پی اچ پی از الگوی MVC استفاده میکنند و هر پروژه ای که با php اجرا شود ملزم است که یک اصولی مثل mvc را رعایت کند. پس بحث mvc در php را حتما در نظر داشته باشید.

 

اتمام درس