آموزش طراحی صفحات وب بصورت کاربردی

کوکی ها

سه شنبه, ۹ ارديبهشت ۱۳۹۳، ۰۱:۰۵ ق.ظ
کوکی چیست ؟
کوکی (Cookie) یکی از مکانیزم های حفظ ارتباط بین کلاینت و سرور است (با ذخیره سازی در سمت کلاینت). این مکانیزم برای ذخیره سازی اطلاعات خود از دیسک ماشین کلاینت استفاده می کند . در حقیقت کوکی ها یکسری فایل های متنی هستند که سرور بر روی کامپیوتر کلاینت ذخیره می کند که برای مراجعات بعدی کلاینت یتواند این ماشین (و در حقیقت کاربر) را شناسایی کند و بدین ترتیب برای خود یک حافظه را شبیه سازی کند چرا که پروتکل HTTP یک پروتکل بدون حافظه یا بدون State است و نمی تواند بفهمد که کاربری که اکنون در یک سایت به سر می برد قبلا هم در این وب سایت بوده است . استفاده از کوکی (cookie) مستلزم حمایت مرورگر هاست . طرز کار کوکی به این شکل است که هنگامی که کاربر با مرورگر وارد یک وب سایت برای بار اول می شود سرور بررسی می کند مرورگر یک کوکی به همراه پاسخ HTTP (صفحه درخواستی کاربر) به سمت کلاینت می فرستد . از این پس هربار که با استفاده از این مرورگر وارد این وب سایت بشویم خود مرورگر به صورت خودکار کوکی مربوطه را از روی دیسک بازیابی کرده و به همراه درخواست HTTP به سرور ارسال می کند . در سرور با استفاده از دستورات PHP می توان فهمید که کوکی از طرف کلاینت ارسال شده است یا نه و مقدار آن چیست ؟ و بر این اساس می توان سایر کارها را ترتیب داد .

ایجاد کوکی (cookie)
برای ایجاد کوکی میتوانید به راحتی از تابع setcookie استفاده کنید . تابع setcookie در اصل دارای 5 پارامتر است که چون معمولا سه تای آنها بیشتر استفاده می شوند ما هم به توضیح همین 3 پارامتر بسنده می کنیم . شکل کلی این دستور به شکل زیر است :
setcookie(name , value , expire)
پارامتر اول تابع setcookie نام متغیر کوکی (cookie) است . این نام بعدا برای مراجعه دوباره به کوکی (cookie) استفاده می شود .
پارامتر دوم تابع setcookie مقدار متغیر کوکی است .
پارامتر سوم این تابع زمان انقضاء متغیر کوکی بر حسب ثانیه است .
نکته مهم و قابل توجه در هنگام ایجاد کوکی اینست که تابع setcookie باید قبل از تگ html استفاده شود چرا که با این تابع سرور یک کوکی برای کلاینت ارسال می کند و این کار باید قبل از ارسال تگ html باشد . یک مثال ساده از کاربر کوکی به شکل زیر است :
<?php
setcookie("username" , "mohammad" , time()+3600);
?>
<html>
<head>
</head>
<body>
</body>
</html>
در این مثال ساده یک کوکی (cookie) بنام username با مقدار mohammad ایجاد شده که به مدت یک ساعت (3600 ثانیه ) اعتبار دارد .

استفاده از کوکی (cookie)
برای استفاده از کوکی باید بدانیم که به ازاء هر کوکی که از کلاینت ارسال می شود یک entry در آرایه سراسری COOKIE ساخته می شود . بنابراین این آرایه در همان مرحله ای از اجرا که تابع setcookie اجرا می شود قابل استفاده نیست . یعنی با این تابع آرایه مقدار دهی نمی شود و این آرایه صرفا با ارسال کوکی از سمت کلاینت مقداردهی می گردد . در زیر یک مثال ساده را با هم میبینیم که تغییر یافته مثال فوق است:
<?php
if(!isset($_COOKIE['username']))
setcookie("username" , "mohammad" , time()+3600);
?>
<html>
<head>
</head>
<body>
<?php
if(isset($_COOKIE['username']))
echo "Welcome ".$_COOKIE['username'];
else
echo "Hello Guest!";
?>
</body>
</html>
در صورتیکه کاربر برای بار اول وارد این صفحه شود چون تا به حال وارد این صفحه نشده بنابراین کوکی شکل نگرفته بنابراین شرط if اول درست شده و تابع setcookie اجرا می شود . بعد صفحه وارد قسمت body شده و در این قسمت نیز چون شرط if نادرست است مقدار Hello Guest چاپ می شود . (شرط if نادرست است زیرا هنگامی که کاربر وارد این صفحه میشده از قبل هیچ کوکی ای وجود نداشته و برای سرور نیز چیزی ارسال نمیشود و بنابراین آرایه COOKIE هیچ کوکی ای با این نام ندارد ) . حال دوباره پاسخ HTTP به سمت کاربر ارسال شده وبا این پاسخ یک کوکی نیز وجود دارد . فرض کنید کاربر مرورگر را ببندد و سیستم را نیز خاموش کند . اگر زمانی که دوباره به این سایت برمیگردد زمان انقضاء کوکی تمام نشده باشد این کوکی به همراه درخواست به سرور ارسال می شود واین دفعه پیغام Hello mohammad چاپ می شود .

حذف کوکی
برای حذف کوکی (cookie) در PHP باز هم از تابع setcookie استفاده می شود . طریقه استفاده همانند وقتی است که میخواهیم کوکی ایجاد کنیم با این تفاوت که اولا این بار هیچ مقداری به کوکی نمیدهیم (در واقع مقدار را به صورت رشته خالی تعیین می کنیم) و ثانیازمان انقضاء کوکی را زمانی در گذشته تعیین می کنیم . به مثال زیر توجه کنید :
<?php
setcookie("username" , "" , time()-3600);
?>
این تابع همچنان باید قبل از تگ HTML به کار رود .
  • امیر دربندی

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی