دوره‌ها / آموزش جامع PHP (از صفر تا استادی) / کوکی‌ها (PHP Cookies)

کوکی‌ها (PHP Cookies)

30 دقیقه Article

کوکی‌ها: حافظه‌یِ کوتاه در مرورگر 🍪💻

کوکی (Cookie) یک فایلِ کوچک است که سرور رویِ کامپیوترِ کاربر ذخیره می‌کند تا در مراجعاتِ بعدی، او را بشناسد (مثلاً برایِ ذخیره‌یِ انتخابِ زبانِ سایت).

نحوه تنظیم: setcookie()

بسیار مهم: تابعِ setcookie باید قبل از ارسالِ هرگونه خروجیِ HTML به مرورگر فراخوانی شود.

{code_block('setcookie("user", "Ali", time() + 3600, "/"); // برای یک ساعت')}

خواندنِ کوکی:

داده‌ها در متغیرِ سراسری $_COOKIE در دسترس هستند.

{code_block('if(isset($_COOKIE["user"])) { echo $_COOKIE["user"]; }')}
عدمِ ذخیره‌یِ پسورد: هرگز اطلاعاتِ حساس مثل رمزِ عبور را در کوکی ذخیره نکنید، چون کاربر می‌تواند به راحتی محتوایِ کوکی را تغییر دهد یا آن را ببیند.
پارامترهایِ امنیتی: از پارامترِ httponly استفاده کنید تا جاوااسکریپت نتواند کوکی را بخواند (جلوگیری از حملات XSS).

حذفِ کوکی:

برایِ حذف، کافیست تاریخِ انقضایِ آن را به زمانِ گذشته (مثلاً یک ساعت قبل) تغییر دهید.

{code_block('setcookie("user", "", time() - 3600);')}
<hr style="margin: 50px 0; border: 0; border-top: 1px dashed rgba(255,255,255,0.1);">

بخش تخصصی: مهندسی پیشرفته و امنیت در PHP 🐘⚙️

درکِ عمیقِ مفاهیمِ پیشرفته، تفاوتِ بینِ یک کدنویسِ معمولی و یک معمارِ نرم‌افزار را رقم می‌زند.

۱. بهینه‌سازی I/O و بافرینگ

در هنگامِ کار با فایل‌هایِ حجیم، هرگز کلِ فایل را به یکباره در حافظه (RAM) بارگذاری نکنید. استفاده از Streams و توابعِ fopen/fgets به شما اجازه می‌دهد فایل را خط به خط پردازش کنید که باعث می‌شود مصرفِ حافظه همیشه در کمترین سطحِ ممکن باقی بماند.

۲. امنیتِ نشست‌ها (Session Security)

مهم‌ترین خطر در مدیریتِ کاربران، Session Hijacking است. همیشه بعد از لاگین کردنِ کاربر، از session_regenerate_id(true) استفاده کنید تا شناسه‌یِ نشستِ قبلی باطل شود. همچنین فلگ‌هایِ HttpOnly و Secure را برای کوکی‌ها فعال کنید.

۳. استانداردهایِ مدرن و Autoloading

در پروژه‌هایِ بزرگ، استفاده از include دستی فاجعه‌بار است. استانداردِ PSR-4 و استفاده از Composer به شما اجازه می‌دهد کلاس‌ها را فقط در زمانی که واقعاً نیاز هستند بارگذاری کنید (Lazy Loading)، که سرعتِ لود شدنِ کلِ اپلیکیشن را به شدت بالا می‌برد.

نکته استراتژیک: به جایِ استفاده از توابعِ سنتی، سعی کنید به سمتِ Object-Oriented Programming (OOP) حرکت کنید. اکثرِ کتابخانه‌هایِ پیشرفته‌یِ PHP مثل DateTime و PDO از این پارادایم استفاده می‌کنند.

تمرین‌های عملی

برای تثبیت یادگیری این درس تمرین‌های زیر را حل کنید

تنظیم کوکی Medium
سوال تمرین

یک کوکی به نام "city" با مقدار "Tehran" تنظیم کنید که در تمامِ سایت (/) در دسترس باشد.

پاسخ تمرین
PHP
<?php
setcookie("city", "Tehran", 0, "/");
?>

آماده رفتن به درس بعدی هستید؟

این درس را به پایان رساندید و می‌توانید به درس بعدی بروید.