ممکن است در مورد کوکیها چیزهایی شنیده باشید، اما آنها دقیقا چه هستند و ما چه کارهایی میتوانیم با آنها انجام دهیم؟ در این مقاله قصد داریم بر روی اصول پایه کوکیها تمرکز کنیم و با عملکرد آنها در برنامههای مختلف وب آشنا شویم. همچنین نحوه کار با کوکیها در PHP را یاد خواهید گرفت.
کوکیها در مقابل متغیرهای Session
چه موقع به کوکیها و چه موقع به متغیرهای session احتیاج داریم؟ session راهی برای ذخیره اطلاعات مربوط به یک کاربر در پایگاه داده و بازیابی آن در صورت نیاز است. اما کوکی راهی برای ذخیره اطلاعات مربوط به یک کاربر در کلاینت است. متغیرهای session معمولا در برنامههایی استفاده میشوند که نیاز به پیگیری فعالیت کاربر دارند. ولی کوکیها معمولا در برنامههایی مورد استفاده قرار میگیرند که نیازمند ذخیره اطلاعات مربوط به کاربر برای یک وب سایت مشخص هستند.
برای کسب اطلاعات بیشتر میتوانید مقاله مربوط به مفهوم و کاربرد session در PHP را مطالعه کنید.
کوکی چیست؟
بیایید با تعریف اولیه شروع کنیم:
کوکی HTTP (به آن کوکی وب، کوکی اینترنتی، کوکی مرورگر یا به اختصار کوکی گفته میشود) قطعه کوچکی از داده است که توسط مرورگر وب هنگام مشاهده صفحات سایت در سیستم کاربر ذخیره میشود.
ما میتوانیم کوکیها را به عنوان فایلهای متنی در نظر بگیریم که در کامپیوتر شما ذخیره میگردند و هنگام درخواست هر صفحه وب، وب سرور پاسخ آن را به مرورگر شما ارسال مینماید. همراه با پاسخ، وب سرور همچنین میتواند هدرهای Set-Cookie HTTP را نیز منتقل کرده که از مرورگر شما درخواست ایجاد فایلهای کوکی در کامپیوتر را میکند. هنگامی که کوکیها برای یک وب سایت ایجاد میشوند، وب سرور میتواند مطالب را از این فایلها خوانده و روی آنها نیز بنویسد.
علاوه بر این، کوکیها دارای تاریخ انقضا برای دادههای خود هستند. این تاریخ به گونهای تنظیم شده است که مرورگر بتواند کوکیهای قدیمی را هنگامی که دیگر مورد نیاز وب سرور نیستند، حذف کند. اگر تاریخ انقضا خالی باشد، کوکی با بسته شدن اتصال به سرور حذف میشود. این امر زمانی اتفاق میافتد که کاربر پنجره یا تب صفحه را ببندد، همچنین هنگامی که کلا از مرورگر خارج شود. این کوکیها که گاهی اوقات کوکیهای session هم نامیده میشوند، بیشتر برای ذخیره تنظیمات موقت مورد استفاده قرار میگیرند.
بنابراین بیایید بررسی هدر HTTP Set-cookie را با مثال زیر ببینیم:
Set-Cookie: LastVisitedSection=CodeTutsplus; expires=Fri, 31-Mar-2021 23:59:59 GMT; path=/; domain=.tutsplus.com
در نمونه بالا، وب سرور از مرورگر میخواهد کوکی LastVisitedSection را ایجاد کند. مرورگر CodeTutsplus را به عنوان داده کوکی ذخیره میکند. همچنین فایل کوکی میتواند یک رشته متن یا عددی حداکثر تا 4 کیلوبایت را ذخیره نماید.
از ویژگی expires برای تعیین تاریخ انقضا استفاده میشود. بنابراین کوکی LastVisitedSection پس از تاریخ 31 مارس 2021 و ساعت 23:59:59 از رایانه شما حذف خواهد شد.
از ویژگی domain برای تعیین دامنهای که کوکی در آن فعال خواهد بود، استفاده میشود. اگر دامنه ads.google.com باشد، کوکی فقط به سرور آن دامنه ارسال میگردد و اگر دامنه google.com. باشد، کوکی به هر سروری که از زیردامنههای گوگل باشند از جمله خود google.com ارسال میشود. در مثال ما، کوکی LastVisitedSection در دسترس tutsplus.com و هر یک از زیردامنههای آن خواهد بود.
path مسیر دامنهای است که کوکی به آن ارسال میشود. این بدان معناست که اگر مسیر روی /images/ و دامنه روی ads.google.com تنظیم شده باشد، کوکی فقط در صورتی به سرور ارسال میشود که مرورگر فایلی را از /ads.google.com/images درخواست کند. و اگر مسیر روی / تنظیم شده باشد، کوکی بدون در نظر گرفتن موقعیت فایل درخواستی به سرور ارسال میشود. در مثال ما، کوکی LastVisitedSection به تمام صفحات دامنه tutsplus.com ارسال خواهد شد.
بنابراین به این صورت است که یک وب سرور کوکیها را در کامپیوتر شما ایجاد میکند. در بخش بعدی درباره هدف کوکیها بحث میکنیم.
هدف کوکیها چیست؟
HTTP یک پروتکل stateless است، به این معنی که هیچ سرور داخلی برای به خاطر سپردن یک کاربر خاص بین چندین درخواست وجود ندارد. به عنوان مثال هنگام دسترسی به یک صفحه وب، سرور فقط مسئول ارائه محتویات صفحه درخواستی است. هنگامی که به صفحات دیگر یک وب سایت دسترسی پیدا میکنید، وب سرور هر درخواست را جداگانه تفسیر میکند، طوری که به نظر میرسد آنها با یکدیگر ارتباطی ندارند. همچنین راهی وجود ندارد که سرور بداند هر درخواست از یک کاربر ارسال شده است.
اکنون اگر میخواهید قابلیتهایی مانند ورود کاربران یا سبد خرید را پیادهسازی کنید، باید مشخص کنید که آیا دو درخواست از یک مرورگر آمده است. این کار با یک پروتکل stateless امکان پذیر نیست. ما باید state یا session را بین درخواستهایی که توسط مرورگر برای شناسایی کاربر انجام میشود، حفظ کنیم. اینجاست که کوکیها وارد عمل میشوند.
کوکیها به شما امکان میدهند اطلاعات را در صفحات مختلف یک سایت یا برنامه به اشتراک بگذارید، بدین صورت به حفظ state کمک میکنند. این به سرور میگوید که همه درخواستها از یک کاربر سرچشمه میگیرد، بنابراین به سایت اجازه میدهد اطلاعات و تنظیمات مخصوص کاربر را نمایش دهد.
نمودار زیر نحوه کار پروتکل HTTP با کوکیها را نشان میدهد:
نحوه ایجاد کوکی در PHP
در این بخش، نحوه ایجاد کوکیها در PHP را مورد بحث قرار میدهیم.
برای ایجاد کوکی در PHP باید از تابع setcookie استفاده کنید. ابتدا بیایید به سینتکس اصلی که برای ایجاد کوکی استفاده میشود نگاهی بیندازیم.
setcookie ( string $name , string $value = "" , int $expires = 0 , string $path = "" , string $domain = "" , bool $secure = false , bool $httponly = false );
لیست آرگومانها در تابع setcookie باید برای شما آشنا به نظر برسد، زیرا قبلا در مورد این پارامترها بحث کردیم. با این حال دو آرگومان دیگر وجود دارد، safe$ و httponly$ که درک آنها بسیار مهم است.
اگر پارامتر safe$ را روی TRUE تنظیم کنید، کوکی فقط در صورت وجود اتصال امن ایجاد میشود. و پارامتر httponly$ به شما امکان میدهد کوکیها را روی HTTP تنظیم کنید، بنابراین فقط از طریق پروتکل HTTP قابل دسترسی هستند. کوکیهایی که فقط به عنوان HTTP تنظیم شدهاند، با زبانهای اسکریپتی مانند جاوااسکریپت قابل دسترسی نیستند.
این فقط سینتکس کد بود. اکنون بیایید نگاهی به یک مثال در دنیای واقعی بیندازیم.
<?php
setcookie("LastVisitedSection", "CodeTutsplus", time() + 3600, "/", "tutsplus.com", 1);
کوکی LastVisitedSection را با مقدار CodeTutsplus ایجاد میکند و یک ساعت دیگر منقضی میشود. آرگومان مسیر روی / تنظیم شده است، بنابراین به تمام صفحات دامنه tutsplus.com ارسال میشود.
حالا میخواهیم مثال دیگری را بررسی کنیم.
<?php
setcookie("favCourse", "PHP", time() + 3600, "/courses/", "code.tutsplus.com", 1);
همانطور که آرگومان مسیر را بر روی /kurss/ تنظیم کردهایم، کوکی favCourse فقط در صورتی ارسال میشود که مرورگر صفحاتی را از /https://code.tutsplus.com/courses درخواست کند.
به این ترتیب میتوانید کوکیها را در PHP ایجاد کنید. مهمترین نکتهای که هنگام ایجاد کوکی در PHP باید به خاطر داشته باشید این است که قبل از ارسال هرگونه داده به مرورگر، باید همه کوکی ها را تنظیم نمایید. کوکیها متعلق به هدر هستند، بنابراین قبل از خروجی باید همیشه کوکیهای جدید را مقداردهی کنید. این شامل دستورات echo یا print و تگهای <html> یا <body> میشود.
نحوه خواندن کوکیها در PHP
خواندن کوکیها در PHP ساده است. بدین منظور باید از متغیر سوپرگلوبال $_COOKIE استفاده کنید. این در واقع یک آرایه است که همه کوکیها را شامل میشود.
بیایید نگاهی به قطعه کد زیر بیندازیم.
<?php
if(isset($_COOKIE["LastVisitedSection"])){
echo "Recently visited section: " . $_COOKIE["LastVisitedSection"];
} else{
echo "Welcome guest! We encourage you to explore different sections!";
}
میتوانید از تابع print_r یا var_dump برای بررسی همه کوکیهای موجود به منظور دیباگ کردن استفاده کنید.
<?php
print_r($_COOKIE);
خواندن کوکیها در PHP به همین سادگی است!
در قسمت بعدی نحوه حذف کوکیها را خواهیم دید.
نحوه حذف کوکیها در PHP
این ممکن است برای شما جالب باشد که میتوان از تابع setcookie برای حذف کوکیها نیز استفاده کرد. نکته مهم اینجاست که باید تاریخ انقضا را در گذشته تعیین کنید و بعد کوکی مورد نظر حذف میشود.
بیایید آن را در عمل ببینیم.
<?php
unset($_COOKIE['LastVisitedSection']);
setcookie("LastVisitedSection", "", time() - 3600, "/");
همانطور که مشاهده میکنید، ما تاریخ انقضا را در گذشته با تنظیم time() - 3600 مشخص کردهایم. لازم به ذکر است که از تابع unset برای حذف کوکی LastVisitedSection و از متغیر سوپرگلوبال
$ _COOKIE نیز کمک گرفتیم. مطمئن شوید که کوکی LastVisitedSection بعدا در کد در دسترس نباشد.
نکات ضروری برای استفاده از کوکیها در PHP
برای حسن ختام میخواهیم برخی از نکاتی که باید هنگام کار با کوکیها در نظر داشته باشید را در زیر خلاصه کنیم:
- هرگز اطلاعات حساس را در یک کوکی وارد نکنید. ممکن است کاربر در حال مرور صفحه در یک کامپیوتر عمومی باشد، بنابراین نباید هیچگونه اطلاعات شخصی باقی بماند.
- هرگز به دادههای گرفته شده از کوکیها اعتماد نکنید و همیشه رشتهها و اعداد را فیلتر نمایید. کامپیوترهای کلاینت میتوانند کوکیها را به دلخواه تغییر دهند، بنابراین مهاجم میتواند دادههای مخرب را روی کوکی بنویسد تا سرویس شما را از کار بیاندازد.
- سعی کنید مدت زمان اعتبار کوکی را تخمین زده و تاریخ انقضا را مطابق آن تعیین کنید. شما نباید سیستم کاربر را با کوکیهای قدیمی که چند سال دیگر منقضی میشوند، اشغال کنید.
- در صورت امکان همیشه فلگهای امن و httponly را تنظیم نمایید. اگر برنامه شما کوکیها را با جاوااسکریپت ویرایش نمیکند، httponly را فعال کرده و سعی کنید همیشه از پروتکل HTTPS برای برقرای ارتباط بهره بگیرید. این امر یکپارچگی و محرمانگی دادهها را بهبود میبخشد.
جمعبندی
در این مقاله راجع به اصول اولیه کوکیها و نحوه استفاده از آنها در PHP بحث کردیم. موضوع مرتبط دیگر sessionها و تفاوت آنها با کوکیها و کاربرد هر یک بود که مثالهای مختلفی را نیز در این باره پوششش دادیم.
دیدگاه و پرسش
در حال دریافت نظرات از سرور، لطفا منتظر بمانید
در حال دریافت نظرات از سرور، لطفا منتظر بمانید