آموزش جامع کوکی (Cookie) در PHP + مدیریت اصولی و امنیت آن بر اساس استاندارد گوگل
در دنیای توسعه وب، برای ایجاد یک تجربه کاربری شخصیسازی شده و پایدار، نیاز داریم تا اطلاعاتی را در سمت مرورگر کاربر ذخیره کنیم. یکی از قدیمیترین و محبوبترین ابزارها برای این کار، کوکی (Cookie) است. در این مقاله قصد داریم به طور جامع به آموزش کوکیها در زبان PHP و نحوه مدیریت امن آنها طبق استانداردهای گوگل بپردازیم.
کوکی (Cookie) چیست و چگونه کار میکند؟
کوکی یک فایل متنی کوچک است که توسط سرور ایجاد شده و در مرورگر کاربر ذخیره میشود. هر زمان که کاربر درخواست جدیدی به همان سرور ارسال میکند، مرورگر کوکیهای ذخیره شده را همراه با درخواست ارسال میکند. این مکانیزم به سرور اجازه میدهد تا کاربر را شناسایی کند و وضعیت تعاملی او را به یاد بسپارد.
نحوه ساخت کوکی در PHP با تابع setcookie
برای ایجاد یک کوکی جدید در PHP، از تابع پیشفرض setcookie() استفاده میشود. این تابع باید قبل از ارسال هرگونه خروجی HTML به مرورگر فراخوانی شود.
سینتکس پایه این تابع به شکل زیر است:
setcookie(name, value, expire, path, domain, secure, httponly);
توضیح پارامترهای کلیدی:
- name: نام کوکی (تنها پارامتر اجباری).
- value: مقداری که در کوکی ذخیره میشود.
- expire: زمان انقضای کوکی به ثانیه (Timestamp). اگر تنظیم نشود، با بستن مرورگر حذف میشود.
- path: مسیری در سرور که کوکی در آن در دسترس است (معمولاً '/' برای کل سایت).
- secure: اگر روی true تنظیم شود، کوکی فقط از طریق پروتکل امن HTTPS ارسال میشود.
- httponly: اگر true باشد، جاوااسکریپت نمیتواند به کوکی دسترسی داشته باشد که این امر امنیت را در برابر حملات XSS به شدت افزایش میدهد.
یک مثال عملی برای ساخت کوکی:
$cookie_name = "user_theme";
$cookie_value = "dark";
// تنظیم کوکی برای 30 روز آینده
$expire_time = time() + (86400 * 30);
setcookie($cookie_name, $cookie_value, $expire_time, "/", "", true, true);
echo "کوکی با موفقیت تنظیم شد!";
خواندن مقادیر کوکیها در PHP
برای دسترسی به کوکیهایی که قبلاً ذخیره شدهاند، از متغیر فوقسراسری (Superglobal) به نام $_COOKIE استفاده میکنیم. قبل از خواندن کوکی، همیشه باید با تابع isset() وجود آن را بررسی کنید.
if(isset($_COOKIE['user_theme'])) {
$theme = $_COOKIE['user_theme'];
echo "پوسته انتخابی شما: " . htmlspecialchars($theme);
} else {
echo "هیچ پوستهای انتخاب نشده است. پوسته پیشفرض فعال شد.";
}
حذف یک کوکی در PHP
در PHP تابع مستقیمی به نام delete_cookie وجود ندارد! برای حذف یک کوکی، کافی است مجدداً همان کوکی را با زمان انقضایی در گذشته (مثلاً یک ساعت قبل) بازنویسی کنید.
// تغییر زمان انقضا به یک ساعت قبل جهت حذف کوکی
setcookie("user_theme", "", time() - 3600, "/");
echo "کوکی با موفقیت حذف شد.";
امنیت کوکیها و استانداردهای نوین گوگل
گوگل و مرورگرهای مدرن (مانند کروم) قوانین سختگیرانهای برای استفاده از کوکیها دارند. برای هماهنگی با این استانداردها و افزایش امنیت وبسایت خود، حتماً موارد زیر را رعایت کنید:
- فلگ HttpOnly: همیشه این فلگ را برابر با
trueقرار دهید تا هکرها نتوانند از طریق کدهای مخرب جاوااسکریپت، کوکیهای حساس را سرقت کنند. - فلگ Secure: از اتصال SSL (HTTPS) استفاده کرده و فلگ Secure را فعال کنید.
- ویژگی SameSite: این ویژگی برای جلوگیری از حملات CSRF حیاتی است. در PHPهای مدرن میتوانید آن را روی یکی از مقادیر
LaxیاStrictتنظیم کنید.
تنظیم کوکی امن در PHP 7.3 به بالا:
setcookie("secure_user_id", "98765", [
'expires' =--> time() + 3600,
'path' => '/',
'domain' => '',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید