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

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

مطمئناً تا به حال وارد سایتی شده و تنظیماتی مخصوص خودتان را روی آن اعمال کرده‌اید. پس از مدتی که دوباره به آن سایت مراجعه می‌کنید، می‌بینید که تمام تنظیمات شما همچنان وجود دارد.

علاوه بر مثال ورود به ایمیل که در ابتدا گفتم، با زدن تیک «مرا به خاطر بسپار» در فرم‌های PHP، در مراجعات بعدی، سایت شما را شناخته و دیگر نیازی به وارد کردن نام کاربری و رمز عبور نیست.

همان‌طور که می‌دانید پروتکل‌های تحت وب (نظیر HTTP)، پروتکل‌های بدون وضعیت (یا Stateless) هستند. یعنی این پروتکل‌ها وضعیت ارتباط را ذخیره نکرده و درخواست‌های کاربران را از هم تفکیک نمی‌کنند. سرور سایتی که در حال دریافت خدمات از آن هستید، بین شما و سایر کاربران هیچ تفاوتی قائل نمی‌شود!

برای اینکه بتوان وضعیت کاربران را بین یک سایت و کاربر رد و بدل کرد، باید از ویژگی‌های جانبی استفاده کنیم. برای این کار، هنگام ارسال درخواست‌ها از مرورگر به سایت مورد نظر، باید اطلاعات لازم برای شناسایی کاربر نیز ارسال شود.

کوکی در PHP چیست ؟

احتمالاً تا به حال نام کوکی (Cookie) را شنیده‌اید! کجا ؟ بله دقیقاً! کلوچه‌هایی خوشمزه به نام کوکی! کلوچه‌های کوچک و شیرینی که معمولاً حاوی تکه‌های کاکائو و شکلات است! 🙂

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

کوکی در سایت و کامپیوتر
کوکی در سایت و کامپیوتر

در اولین ارتباط سرور با کاربر، این اطلاعات توسط سرور ایجاد شده و برای مرورگر ارسال می‌شود. مرورگر آن‌ها را در کامپیوتر ذخیره می‌کند.

پس از این اتفاق، هر بار که درخواست جدیدی از طرف کاربر برای سرور ارسال می‌شود، این اطلاعات (همان کوکی‌ها) نیز به همراه درخواست، به سرور ارسال می‌شود.

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

اما در کوکی‌ها، اطلاعات را سمت کاربر نگه می‌داریم. در نتیجه این اطلاعات تا زمان انقضا یا حذف توسط کاربر، باقی می‌مانند.

سشن در PHP : آموزش session در PHP با مثال

سشن در PHP : آموزش session در PHP با مثال

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

ایجاد کوکی در PHP

برای ایجاد کوکی در زبان PHP از تابع setcookie() استفاده می‌شود. این تابع در تمام نسخه‌های PHP وجود داشته و می‌توان از آن به راحتی استفاده کرد. (اگر نمی‌دانید تابع چیست، آموزش تابع در PHP را ببینید.)

setcookie( $name, $value, $expires, $path, $domain, $secure, $httponly );

این تابع 7 ورودی می‌گیرد که فقط آرگومان اول آن اجباری و بقیه اختیاری است. معمولاً برای ایجاد یک کوکی ساده، از سه آرگومان اول آن استفاده می‌شود اما با توجه به مورد کاربرد، می‌توان از سایر آرگومان‌ها نیز استفاده کرد.

آرگومان‌های تابع تعریف کوکی

  • نام ($name) : این آرگومان اجباری بوده و نام کوکی مورد نظرمان را مشخص می‌کند. در ادامه به وسیله همین ویژگی، کوکی را بررسی کرده و محتویات آن را می‌خوانیم.
  • مقدار ($value) : دومین آرگومان مشخص‌کننده مقدار مورد نظر ما برای ذخیره در کوکی می‌باشد. وارد کردن آن اختیاری است؛ اما اکثراً نیاز داریم که برای کوکی خود مقداری در نظر بگیریم.
  • انقضا ($expires): این ورودی از نوع int بوده و یک عدد است. مشخص کننده زمان انقضای کوکی‌ها در مرورگر کاربر است. پس از منقضی شدن کوکی در PHP، مرورگر آن را از روی کامپیوتر حذف کرده و دیگر آن را به سمت سرور ارسال نخواهد کرد.
  • مسیر ($path) : مشخص‌کننده مسیری از سایت است که کوکی در آن معتبر بوده و باید ارسال شود. اگر بخواهیم این کوکی در تمام سایت معتبر باشد، از علامت / استفاده کرده یا اصلاً آن را تعریف نمی‌کنیم.
  • دامنه ($domain) : دامنه سایتی که کوکی برای آن اعتبار دارد را مشخص می‌کند. اگر این آرگومان تعریف نشود، دامنه سایت ما (سایتی که برنامه PHP روی آن در حال اجراست) برای کوکی در نظر گرفته می‌شود.
  • امنیت ($secure) : این ورودی از نوع صفر و یک یا TRUE و FALSE است. اگر مقدار آن برابر TRUE باشد، کوکی‌ها فقط در ارتباطات https برای سایت ارسال می‌شوند.
  • فقط پروتکل HTTP ($httponly) : این ورودی هم از نوع درست یا غلط است و اگر فعال باشد کوکی مورد نظر فقط در ارتباط HTTP ارسال می‌شود و در سایر ارتباطات که توسط جاوا اسکریپت یا سایر پروتکل‌ها برقرار می‌شوند تبادل نخواهد شد.

تابع زیر را در ابتدا برنامه خود اجرا می‌کنیم.

setcookie( "email", "user@gmail.com", time() + 86400 );

پس از اجرای این یک خط، یک کوکی به نام email در مرورگر کاربر ذخیره می‌شود که مقدار user@gmail.com را دارا بوده و تا 24 ساعت اعتبار دارد.

معمولاً در مشخص کردن تاریخ انقضای کوکی از توابع کار با زمان در PHP استفاده می‌کنند. تابع time() زمان فعلی سیستم را به ثانیه نشان می‌دهد. ما مقدار آن را با 86400 ثانیه (معادل یک روز) جمع کرده و به عنوان زمان انقضای کوکی تعریف کرده‌ایم.

بیایید از آرگومان‌های بیشتری برای تعریف کوکی در PHP استفاده کنیم.

<?php
setcookie( "email", "user@gmail.com", time() + 86400 , "/college", "https://sabzdanesh.com" );

کوکی حاصل از این قطعه کد، فقط در مسیر /college سایت سبز دانش معتبر بوده و در دیگر مسیرها برای سرور ارسال نمی‌شود. مثلاً اگر کاربر در همین صفحه حضور داشته باشد، ما به کوکی email او دسترسی نخواهیم داشت، چون چیزی برای سایت ارسال نشده است.

وقتی یک کوکی در PHP ایجاد می‌کنیم، محتوای آن هر چیزی می‌تواند باشد. یعنی حتماً نباید یک ایمیل در آن قرار دهیم، بلکه می‌توان ترکیبی از چند دیتای مختلف که مورد نیازمان است را نیز ذخیره کنیم.

استفاده از کوکی‌ها

در زبان برنامه نویسی PHP، کوکی‌ها در متغیر سراسری $_COOKIE نگه داشته می‌شوند. در هر کجای برنامه که بخواهیم به یک کوکی دسترسی داشته باشیم، می‌توانیم از این متغیر مثل یک آرایه در PHP استفاده کنیم.

<?php
echo $_COOKIE[ $cookie_name ];

ورودی این متغیر دقیقاً همان نامی است که در هنگام ایجاد کردن کوکی با تابع setcookie() تعریف کرده‌ایم. اگر کوکی با نام مورد نظر وجود نداشته باشد، اجرای خط بالا با خطا مواجه خواهد شد!

برای جلوگیری از بروز خطا در هنگام صدا زدن کوکی‌ها، بهتر است ابتدا وجود آن‌ها را بررسی کنیم. این کار را با استفاده از تابع isset() انجام می‌دهیم.

کوکی مورد نظرمان را به عنوان ورودی به این تابع می‌دهیم، اگر خروجی TRUE بود، یعنی کوکی وجود دارد و از طرف کاربر برایمان ارسال شده است.

<?php
if( isset( $_COOKIE[$cookie_name] ) ) {
    echo $_COOKIE[ $cookie_name ];
}

ترفند: دسترسی به کوکی در PHP

برای حرفه‌ای‌تر شدن برنامه‌ای که می‌نویسیم، بهتر است در هنگام ایجاد یک کوکی در PHP، ابتدا وجود داشتن آن را بررسی کنیم تا اگر قبلاً کوکی را تنظیم کرده بودیم، کار اضافه انجام ندهیم.

if( ! isset( $_COOKIE['email'] ) ) {
    setcookie( "email", "user@gmail.com", time() + 86400 );
}

همان‌طور که می‌دانید از علامت تعجب (!) برای منفی کردن نتیجه استفاده کرده‌ام. (بیشتر بدانید: عملگرهای PHP)

برای دسترسی به کوکی در PHP می‌توان از متغیر سراسری $_REQUEST نیز استفاده کرد. این تابع تمام اطلاعات ارسالی از سمت کاربر را در خود ذخیره می‌کند. برای مطالعه بیشتر در این مورد می‌توانید به مستندات انگلیسی آن مراجعه کنید. در مورد متغیرهای مشابه نیز در آموزش متغیرهای سراسری PHP صحبت کرده‌ام.

تغییر کوکی‌های برنامه

گاهی اوقات نیاز داریم تا پس از ایجاد کوکی در PHP، مقدار آن‌ها را تغییر دهیم. برای این کار، به همان روش ایجاد کوکی اقدام می‌کنیم. با این تفاوت که مقدار جدید را به عنوان ورودی دوم تابع setcookie() می‌دهیم.

setcookie( "name", "sara", time() + 86400 );
// Changing the PHP Cookie
setcookie( "name", "omid" );

در این کد، من فقط مقدار کوکی را تغییر دادم. شما می‌توانید به دلخواه، زمان انقضا یا سیار ویژگی‌ها را نیز مجدداً تعریف کنید.

حذف کوکی PHP

در زبان PHP تابعی برای حذف مستقیم کوکی‌ها وجود ندارد! با استفاده از تابع setcookie() و تعریف ویژگی‌های خاص برای کوکی، می‌توانیم آن‌ها را حذف کنیم.

دو روش برای حذف کوکی در PHP داریم:

  • مقدار کوکی مورد نظر را نامعتبر کنیم. این کار با جایگزینی یک مقدار نامعتبر یا خالی به جای مقدار فعلی آن انجام می‌شود.
  • زمان انقضای کوکی را زمانی در گذشته انتخاب کنیم؛ با این کار، کوکی بلافاصله پس از تغییر یافتن، حذف خواهد شد.

برای مثال، دو کوکی به نام‌های $name و $login_id به صورت زیر تعریف می‌کنیم تا بتوانیم نام کاربر و شناسه ورود او را تشخیص دهیم.

setcookie( "name"    , "omid",            time() + (86400 * 7) );
setcookie( "login_id", "5Sd12s6et9%8bsq", time() + (86400 * 7) );

حال اگر کاربر از برنامه ما خارج شود، بهتر است شناسه ورود (کوکی login_id) را نیز حذف کنیم. در کد زیر مشابه روش اول (نامعتبر کردن مقدار کوکی) عمل کرده و مقدار شناسه را برابر یک رشته خالی قرار می‌دهیم. (روش اول)

setcookie( "login_id", "" );

در قطعه کد زیر، هر دو روش را به صورت ادغامی انجام داده‌ام. این‌گونه از حذف شدن کوکی‌ها در کامپیوتر کاربر مطمئن‌تر خواهیم بود.

setcookie( "login_id", "" , time()-60 );

این جا، زمان منقضی شدن (expire) کوکی را یک دقیقه قبل تنظیم کردیم. این زمان را می‌توانید به دلخواه، یک ساعت، یک روز یا حتی یک سال قبل هم تعیین کنید!

پیشنهاد می‌کنم از روش دوم (یعنی تغییر زمان اعتبار کوکی) استفاده کنید؛ تا داده‌های اضافی در سیستم کاربرد نگه نداریم!

آموزش کار با فرم در php و ساخت فرم

آموزش کار با فرم در php و ساخت فرم

جمع‌بندی: کوکی در PHP

در این مقاله به هر آنچه در مورد کوکی‌های PHP باید می‌دانستید پرداختیم! از کوکی در PHP برای نگهداری اطلاعات در سمت کاربر استفاده می‌شود. به کمک cookieها می‌توانیم کاربران را تشخیص داده و یا اطلاعاتی نظیر شناسه ورود یا نام کاربری آن‌ها را تشخیص دهیم.

کوکی‌ها در مرورگر و سیستم کاربر ذخیره می‌شوند، در نتیجه قابل تغییر توسط کاربر یا به سرقت رفتن هستند. باید در هنگام کار با cookie در PHP نهایت دقت را به کار برد. مراقب باشید که داده‌های مهم و حیاتی (مانند رمز عبور کاربر) را در کوکی ذخیره نکنید.

اگر نیاز شد داده‌های مهم را در کوکی ذخیره کنید، بهتر است ابتدا آن‌ها را رمزنگاری کرده یا به شیوه‌ای درهم‌ریزی کرده و سپس از آن‌ها استفاده کنید.

از تابع setcookie() برای ایجاد کوکی، تغییر کوکی و حذف آن استفاده کردیم. همان‌طور که دیدیم، این تابع 7 ورودی دارد اما معمولاً به جز سه ورودی اول، از سایر آرگومان‌ها کمتر استفاده می‌شود.

کل بحث کوکی همین است! به همین سادگی، به همین خوشمزگی! پیشنهاد می‌کنم برای خودتان چند نمونه از کارهایی که می‌توانید با کوکی‌ها انجام دهید را مثال بزنید. اگر ایده‌هایتون رو با سایر دوستانتون در بخش دیدگاه‌ها اشتراک بذارید هم خیلی عالی می‌شه! 🙂

این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP