اگر با طراحی سایت و برنامهنویسی PHP کار کرده باشید، احتمالاً با مفهومی به نام Cookie یا کوکی برخورد کردهاید.
Cookie یکی از مکانیزمهای مهم وب برای ذخیره اطلاعات کوچک در مرورگر کاربر است. از Cookie میتوان برای موارد مختلفی مانند نگهداری تنظیمات کاربر، تشخیص برخی وضعیتهای مرورگر، نگهداری شناسه Session و بعضی سناریوهای احراز هویت استفاده کرد.
اما Cookie دقیقاً چیست؟ چگونه در PHP ساخته میشود؟ چگونه مقدار آن را بخوانیم یا حذف کنیم؟ تفاوت Cookie با Session چیست؟ و مهمتر از همه، چگونه Cookie را به شکل امن استفاده کنیم؟
در این مقاله همه این موارد را با مثالهای عملی بررسی میکنیم.
Cookie در PHP چیست؟
Cookie یک مقدار کوچک از داده است که وبسایت میتواند در مرورگر کاربر ذخیره کند.
برای مثال میتوانیم Cookieای با نام:
username
و مقدار:
saeed
ایجاد کنیم.
مرورگر این Cookie را ذخیره میکند و در درخواستهای بعدی، در شرایطی که قوانین Cookie اجازه بدهند، آن را برای همان دامنه ارسال میکند.
در PHP برای ایجاد Cookie از تابع:
setcookie()
استفاده میکنیم.
برای خواندن Cookie نیز از:
$_COOKIE
استفاده میشود.
# Cookie چگونه کار میکند؟
فرآیند ساده Cookie را میتوان اینگونه تصور کرد:
PHP
↓
Set-Cookie
↓
Browser
↓
ذخیره Cookie
↓
Request بعدی
↓
ارسال Cookie
↓
PHP
مثلاً PHP به مرورگر میگوید:
Set-Cookie: username=saeed
مرورگر Cookie را ذخیره میکند.
در درخواستهای بعدی ممکن است چیزی شبیه این ارسال شود:
Cookie: username=saeed
سپس PHP میتواند مقدار Cookie را از $_COOKIE دریافت کند.
# ساخت Cookie در PHP
سادهترین روش ساخت Cookie استفاده از setcookie() است:
<?php
setcookie('username', 'saeed');
در این مثال:
- نام Cookie برابر
username - مقدار Cookie برابر
saeed
است.
بعد از ارسال پاسخ HTTP، مرورگر میتواند این Cookie را ذخیره کند.
# خواندن Cookie در PHP
برای خواندن Cookie از $_COOKIE استفاده میکنیم:
<?php
echo $_COOKIE['username'];
اگر Cookie وجود داشته باشد، مقدار آن نمایش داده میشود.
برای مثال:
setcookie('username', 'saeed');
و در درخواست بعدی:
echo $_COOKIE['username'];
خروجی:
saeed
# چرا Cookie بلافاصله بعد از setcookie در همان درخواست قابل مشاهده نیست؟
این یکی از نکات مهم برای افراد تازهکار است.
اگر بنویسیم:
<?php
setcookie('username', 'saeed');
echo $_COOKIE['username'];
ممکن است مقدار جدید را در همان Request مشاهده نکنیم.
دلیل این است که setcookie() یک Header به مرورگر ارسال میکند و Cookie توسط مرورگر برای درخواستهای بعدی مورد استفاده قرار میگیرد.
بنابراین بهتر است این فرآیند را دو مرحلهای تصور کنیم:
Request 1
PHP → Set-Cookie → Browser
Request 2
Browser → Cookie → PHP
# setcookie در PHP چیست؟
تابع setcookie() برای ارسال Cookie به مرورگر استفاده میشود.
ساختار ساده:
setcookie(
string $name,
string $value = "",
int $expires = 0,
string $path = "",
string $domain = "",
bool $secure = false,
bool $httponly = false
);
در نسخههای جدید PHP میتوان از آرایه Options نیز استفاده کرد که روش خواناتر و مناسبتری برای تنظیم ویژگیهای Cookie است.
# تعیین زمان انقضای Cookie
Cookie میتواند زمان انقضا داشته باشد.
مثلاً:
setcookie(
'username',
'saeed',
time() + 3600
);
در این مثال:
3600 ثانیه = 1 ساعت
بنابراین Cookie تقریباً یک ساعت اعتبار خواهد داشت.
# Cookie یکروزه
برای ساخت Cookie با اعتبار یک روز:
setcookie(
'username',
'saeed',
time() + 86400
);
زیرا:
24 × 60 × 60 = 86400
# Cookie یکساله
مثلاً:
setcookie(
'username',
'saeed',
time() + 31536000
);
در اینجا زمان انقضا تقریباً یک سال بعد تعیین شده است.
# Cookie Session چیست؟
اگر زمان انقضای Cookie را به صورت دائمی تعیین نکنیم، Cookie میتواند یک Session Cookie باشد.
مثلاً:
setcookie('username', 'saeed');
در این حالت مرورگر Cookie را به عنوان Cookie بدون زمان انقضای مشخص مدیریت میکند.
رفتار دقیق آن به مرورگر و تنظیمات آن نیز وابسته است.
# حذف Cookie در PHP
برای حذف Cookie معمولاً یک Cookie با همان نام و زمان انقضای گذشته ارسال میکنیم:
setcookie(
'username',
'',
time() - 3600
);
یا:
setcookie(
'username',
'',
time() - 42000
);
در نتیجه مرورگر Cookie را منقضی میکند.
# حذف Cookie با تنظیمات جدید PHP
در PHP مدرن میتوانیم از آرایه Options نیز استفاده کنیم:
setcookie('username', '', [
'expires' => time() - 3600,
'path' => '/',
]);
این روش زمانی مفید است که Cookie را با تنظیمات مختلفی ایجاد کرده باشیم.
نکته مهم این است که هنگام حذف Cookie باید ویژگیهای مهمی مانند path و در صورت استفاده، domain با Cookie اصلی سازگار باشند.
# Cookie با Path چیست؟
با گزینه path مشخص میکنیم Cookie برای چه مسیری از سایت قابل ارسال باشد.
مثلاً:
setcookie(
'username',
'saeed',
time() + 3600,
'/'
);
با:
/
Cookie برای کل سایت قابل استفاده خواهد بود.
اما اگر بنویسیم:
setcookie(
'username',
'saeed',
time() + 3600,
'/admin'
);
Cookie برای مسیر /admin و مسیرهای زیرمجموعه آن محدود میشود.
# Cookie با Domain
میتوان برای Cookie دامنه نیز مشخص کرد:
setcookie(
'username',
'saeed',
time() + 3600,
'/',
'example.com'
);
در پروژههای واقعی باید در تعیین Domain دقت کنیم؛ مخصوصاً زمانی که سایت دارای Subdomainهای مختلف است.
# Cookie امن در PHP
Cookieها میتوانند اطلاعات مهمی را در خود داشته باشند و به همین دلیل باید ویژگیهای امنیتی آنها را بشناسیم.
دو گزینه بسیار مهم:
Secure
HttpOnly
هستند.
همچنین گزینه:
SameSite
برای کنترل ارسال Cookie در شرایط Cross-Site اهمیت زیادی دارد.
# گزینه Secure در Cookie
اگر Cookie را با:
'secure' => true
ایجاد کنیم، مرورگر آن را فقط روی اتصال HTTPS ارسال میکند.
مثلاً:
setcookie('username', 'saeed', [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
]);
بنابراین زمانی که سایت شما HTTPS دارد، استفاده از Secure برای Cookieهای حساس اهمیت زیادی دارد.
# گزینه HttpOnly در Cookie
یکی از ویژگیهای مهم Cookie:
'httponly' => true
است.
مثلاً:
setcookie('username', 'saeed', [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
'httponly' => true,
]);
با فعال بودن HttpOnly، کد JavaScript معمولی صفحه نمیتواند Cookie را از طریق document.cookie بخواند.
این ویژگی برای Cookieهای حساس، مخصوصاً Cookie مربوط به Session، اهمیت زیادی دارد.
البته HttpOnly جایگزین جلوگیری از XSS نیست.
# SameSite در Cookie چیست؟
SameSite مشخص میکند مرورگر Cookie را در چه شرایطی در درخواستهای Cross-Site ارسال کند.
سه مقدار رایج عبارتاند از:
Strict
Lax
None
مثلاً:
setcookie('username', 'saeed', [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
SameSite=Lax
در بسیاری از سایتهای معمولی انتخاب مناسبی است و محدودیتهایی روی ارسال Cookie در درخواستهای Cross-Site اعمال میکند.
SameSite=Strict
سختگیرانهتر است و Cookie را در شرایط Cross-Site محدودتر ارسال میکند.
SameSite=None
اجازه میدهد Cookie در سناریوهای Cross-Site نیز ارسال شود، اما مرورگرها معمولاً برای SameSite=None نیاز به Secure دارند.
انتخاب مقدار مناسب به معماری سایت و نیازهای آن بستگی دارد.
# روش مدرن ساخت Cookie در PHP
به جای استفاده از پارامترهای متعدد، میتوانیم از آرایه Options استفاده کنیم:
<?php
setcookie('username', 'saeed', [
'expires' => time() + 3600,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
این روش خوانایی کد را بیشتر میکند.
# یک مثال کامل برای Cookie
فرض کنید میخواهیم زبان انتخابشده توسط کاربر را ذخیره کنیم.
<?php
setcookie('language', 'fa', [
'expires' => time() + 86400 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
در این مثال زبان کاربر برای ۳۰ روز ذخیره میشود.
در درخواست بعدی:
<?php
$language = $_COOKIE['language'] ?? 'fa';
echo $language;
اگر Cookie وجود داشته باشد، مقدار آن استفاده میشود.
در غیر این صورت مقدار پیشفرض fa انتخاب میشود.
# استفاده از Cookie برای ذخیره تنظیمات کاربر
یکی از کاربردهای مناسب Cookie، نگهداری تنظیمات کوچک و غیرحساس است.
مثلاً حالت نمایش سایت:
setcookie('theme', 'dark', [
'expires' => time() + 86400 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
در درخواست بعدی:
$theme = $_COOKIE['theme'] ?? 'light';
سپس میتوانیم بر اساس مقدار آن، ظاهر سایت را تغییر دهیم.
# Cookie برای Remember Me
یکی از کاربردهای معروف Cookie، قابلیت:
Remember Me
است.
اما اینجا باید بسیار مراقب باشیم.
یک اشتباه رایج این است که رمز عبور را داخل Cookie ذخیره کنیم:
setcookie('password', '123456');
این کار کاملاً نامناسب است.
همچنین نباید اطلاعات حساس را به صورت ساده و قابل خواندن داخل Cookie قرار دهیم.
در سیستم Remember Me بهتر است از یک Token تصادفی و غیرقابل حدس استفاده شود و این Token در سمت سرور نیز مدیریت شود.
مثلاً از نظر مفهومی:
Browser
↓
Remember Token
↓
Server Database
↓
User
و نه:
Browser
↓
Username + Password
# Cookie و Session چه ارتباطی دارند؟
این دو مفهوم بسیار به یکدیگر مرتبط هستند اما یکی نیستند.
در بسیاری از پیادهسازیهای PHP، Session ID در یک Cookie به نامی مانند:
PHPSESSID
به مرورگر داده میشود.
سپس:
Browser
↓
PHPSESSID
↓
PHP
↓
Session Data
بنابراین ممکن است در ظاهر به نظر برسد که Session داخل Cookie ذخیره شده است، اما در حالت معمول، شناسه Session در Cookie قرار دارد و داده Session توسط Session Handler مدیریت میشود.
این تفاوت بسیار مهم است.
# تفاوت Cookie و Session
| ویژگی | Cookie | Session |
|---|---|---|
| محل اصلی داده | مرورگر | معمولاً سمت سرور |
| دسترسی JavaScript | بسته به HttpOnly | داده اصلی سمت سرور |
| حجم | محدود | وابسته به Session Storage |
| کاربرد | تنظیمات و دادههای کوچک | وضعیت کاربر |
| امنیت | باید با دقت مدیریت شود | Session ID باید محافظت شود |
| طول عمر | قابل تنظیم | وابسته به Session و Cookie |
| مناسب Login | میتواند بخشی از سیستم باشد | بسیار رایج |
به زبان ساده:
Cookie:
Browser → Data
Session:
Browser → Session ID → Server → Data
# تفاوت Cookie و LocalStorage
Cookie تنها روش ذخیره اطلاعات در مرورگر نیست.
JavaScript میتواند از localStorage نیز استفاده کند.
مثلاً:
localStorage.setItem('theme', 'dark');
اما LocalStorage و Cookie تفاوتهای مهمی دارند.
| ویژگی | Cookie | LocalStorage |
|---|---|---|
| ارسال خودکار به سرور | بله، در شرایط مربوط به Cookie | خیر |
| دسترسی JavaScript | بسته به HttpOnly | بله |
| مناسب Session Cookie | بله | معمولاً انتخاب مناسبی برای Session Cookie نیست |
| ظرفیت | محدودتر | معمولاً بیشتر |
| کنترل SameSite | دارد | ندارد |
بنابراین نباید Cookie و LocalStorage را صرفاً دو روش یکسان برای ذخیره اطلاعات در مرورگر در نظر بگیریم.
# آیا Cookie امن است؟
Cookie ذاتاً نه کاملاً امن است و نه ناامن.
امنیت آن به نوع اطلاعات، تنظیمات و نحوه استفاده بستگی دارد.
برای Cookieهای حساس بهتر است مواردی مانند:
Secure
HttpOnly
SameSite
به شکل صحیح تنظیم شوند.
همچنین باید از:
- HTTPS
- جلوگیری از XSS
- جلوگیری از CSRF
- Tokenهای تصادفی
- مدیریت صحیح Session
- اعتبارسنجی ورودیها
استفاده شود.
# Cookie و حمله XSS
فرض کنید Cookie حساس شما HttpOnly نباشد.
در برخی شرایط، یک حمله XSS میتواند باعث اجرای JavaScript مخرب در Context سایت شود و مهاجم تلاش کند Cookieهای قابل دسترسی از JavaScript را بخواند.
برای همین Cookieهای حساس، مخصوصاً Session Cookie، معمولاً باید با:
'httponly' => true
تنظیم شوند.
البته این تنظیم به معنی حل شدن کامل مشکل XSS نیست.
خود XSS باید با روشهای مناسب دیگری نیز جلوگیری شود.
# Cookie و حمله CSRF
Cookieها در شرایط مربوط به Domain و SameSite میتوانند به صورت خودکار همراه درخواست ارسال شوند.
به همین دلیل سیستمهایی که Authentication آنها بر پایه Cookie است باید موضوع CSRF را نیز در نظر بگیرند.
یکی از روشهای متداول مقابله با CSRF استفاده از CSRF Token است.
برای مثال:
Form
↓
CSRF Token
↓
Server Validation
↓
Process
در فریمورکهایی مانند Laravel، ابزارهای آمادهای برای مدیریت این موضوع وجود دارد.
# محدودیت حجم Cookie
Cookie برای ذخیره دادههای کوچک طراحی شده است.
بنابراین نباید از Cookie به عنوان Database یا محل نگهداری دادههای حجیم استفاده کنیم.
برای مثال ذخیره کردن یک تنظیم کوچک منطقی است:
theme=dark
اما ذخیره کردن یک لیست بزرگ از محصولات یا اطلاعات کامل کاربر در Cookie انتخاب مناسبی نیست.
# Cookie و اطلاعات حساس
به طور کلی بهتر است اطلاعات بسیار حساس را مستقیماً در Cookie قرار ندهیم.
برای مثال:
password
شماره کارت
اطلاعات محرمانه
توکنهای بدون محافظت مناسب
نباید صرفاً برای راحتی در Cookie ذخیره شوند.
اگر لازم است مرورگر یک شناسه یا Token داشته باشد، باید طراحی امنیتی مناسب برای آن وجود داشته باشد.
# Cookie و Base64
گاهی برنامهنویسان تصور میکنند اگر اطلاعات را با Base64 تبدیل کنند، اطلاعات داخل Cookie امن میشود.
مثلاً:
$value = base64_encode('secret');
این کار رمزنگاری نیست.
Base64 فقط یک Encoding است.
بنابراین:
Base64 ≠ Encryption
اگر دادهای واقعاً نیاز به محرمانگی دارد، باید از مکانیزم رمزنگاری مناسب استفاده شود و طراحی امنیتی آن به شکل صحیح انجام شود.
# Cookie و Hash
Hash نیز با Encryption تفاوت دارد.
برای مثال:
Hash
برای تبدیل یک مقدار به خروجی یکطرفه استفاده میشود و هدف آن با Encryption متفاوت است.
برای Password نیز باید از توابع مخصوص PHP مانند:
password_hash()
استفاده شود، نه اینکه صرفاً Password را در Cookie ذخیره کنیم.
# بررسی وجود Cookie
برای بررسی وجود Cookie:
if (isset($_COOKIE['username'])) {
echo "Cookie وجود دارد.";
}
یا:
$username = $_COOKIE['username'] ?? null;
این روش دوم از ایجاد Warning در صورت نبود Cookie جلوگیری میکند.
# دریافت مقدار پیشفرض
مثلاً:
$theme = $_COOKIE['theme'] ?? 'light';
اگر Cookie وجود داشته باشد:
theme → مقدار Cookie
و اگر وجود نداشته باشد:
theme → light
این الگو در PHP مدرن بسیار کاربردی است.
# تغییر Cookie
برای تغییر مقدار Cookie، کافی است Cookie را دوباره با همان نام ایجاد کنیم:
setcookie('theme', 'dark', [
'expires' => time() + 86400 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
مثلاً اگر قبلاً:
theme=light
وجود داشته باشد، مقدار جدید:
theme=dark
خواهد بود.
# نکته مهم درباره setcookie
تابع setcookie() باید قبل از ارسال Header اجرا شود.
بنابراین بهتر است این کد:
setcookie('theme', 'dark');
قبل از HTML و خروجی قرار داشته باشد.
مثلاً:
<?php
setcookie('theme', 'dark');
?>
<!DOCTYPE html>
<html>
نه اینکه بعد از ارسال خروجی HTTP اجرا شود.
# ساخت Cookie برای Subdomain
فرض کنید سایت شما چنین ساختاری دارد:
example.com
panel.example.com
api.example.com
در بعضی معماریها ممکن است بخواهید Cookie در چند Subdomain قابل استفاده باشد.
این موضوع با تنظیم Domain قابل مدیریت است، اما باید با دقت انجام شود.
هرچه دامنه Cookie گستردهتر باشد، Subdomainهای بیشتری میتوانند در محدوده Cookie قرار بگیرند.
برای Cookieهای حساس، بهتر است Domain را فقط به اندازه نیاز تعیین کنید.
# Cookie و Subdomainهای ناامن
اگر Cookie حساسی را برای دامنهای بسیار گسترده تنظیم کنیم، یک Subdomain آسیبپذیر میتواند به امنیت Cookie کل سیستم آسیب بزند.
بنابراین در معماریهایی که چند Subdomain دارند باید بررسی کنیم:
Cookie Domain
Subdomain Security
Session Security
چگونه با یکدیگر ارتباط دارند.
# ساخت یک سیستم انتخاب زبان با Cookie
حالا یک مثال کاربردیتر ببینیم.
فرض کنید سایت دو زبان دارد:
fa
en
کاربر زبان فارسی را انتخاب میکند:
<?php
setcookie('language', 'fa', [
'expires' => time() + 86400 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
در صفحات بعدی:
<?php
$language = $_COOKIE['language'] ?? 'fa';
if ($language === 'fa') {
echo 'خوش آمدید';
} else {
echo 'Welcome';
}
به این شکل میتوانیم ترجیح کاربر را برای مدتی نگهداری کنیم.
# ساخت سیستم Theme با Cookie
مثال دیگری از کاربرد Cookie، ذخیره Theme است.
<?php
$theme = $_GET['theme'] ?? null;
if ($theme === 'dark' || $theme === 'light') {
setcookie('theme', $theme, [
'expires' => time() + 86400 * 30,
'path' => '/',
'secure' => true,
'httponly' => true,
'samesite' => 'Lax',
]);
}
سپس:
<?php
$theme = $_COOKIE['theme'] ?? 'light';
echo "Theme: " . htmlspecialchars($theme);
در اینجا مقدار Cookie مستقیماً وارد HTML نشده و با htmlspecialchars() خروجی را Escape کردهایم.
# Cookie در Authentication
Cookie میتواند در Authentication نقش داشته باشد، اما نباید آن را با خود Authentication یکی بدانیم.
برای مثال در سیستم Session-based Authentication:
Login
↓
Session Created
↓
Session ID
↓
Cookie
↓
Browser
در این حالت Cookie ممکن است Session ID را نگهداری کند.
اما در سیستمهای Token-based:
Login
↓
Token
↓
Browser
↓
Authorization
معماری متفاوت خواهد بود.
به همین دلیل هنگام طراحی سیستم Authentication باید کل جریان امنیتی را در نظر گرفت.
# بهترین روشهای استفاده از Cookie در PHP
برای استفاده صحیح از Cookie این نکات را رعایت کنید:
1. برای سایتهای HTTPS از Secure استفاده کنید
'secure' => true
2. برای Cookieهای حساس HttpOnly را فعال کنید
'httponly' => true
3. SameSite را متناسب با نیاز تنظیم کنید
مثلاً:
'samesite' => 'Lax'
4. Cookie را برای دادههای کوچک استفاده کنید
Cookie جای Database نیست.
5. Password را در Cookie ذخیره نکنید
این کار خطرناک است.
6. Tokenهای تصادفی و مناسب استفاده کنید
مخصوصاً در Remember Me.
7. زمان انقضای مناسب تعیین کنید
Cookieهای غیرضروری را برای مدت بسیار طولانی نگه ندارید.
8. Domain و Path را تا حد امکان محدود کنید
هرچه محدوده Cookie کمتر باشد، کنترل بیشتری روی آن خواهید داشت.
9. داده Cookie را در خروجی بدون Escape قرار ندهید
اگر مقدار Cookie وارد HTML میشود، Context خروجی را در نظر بگیرید.
مثلاً:
echo htmlspecialchars($_COOKIE['name'] ?? '', ENT_QUOTES, 'UTF-8');
10. Cookie را جایگزین سیستم امنیتی کامل نکنید
Cookie تنها یکی از اجزای معماری وب است.
# تفاوت Cookie، Session و JWT
برای اینکه این سه مفهوم با یکدیگر اشتباه نشوند، به جدول زیر توجه کنید:
| ویژگی | Cookie | Session | JWT |
|---|---|---|---|
| ماهیت | مکانیزم ذخیره در مرورگر | نگهداری State | Token |
| داده اصلی | سمت مرورگر | معمولاً سمت سرور | داخل Token |
| کاربرد | تنظیمات، شناسه و... | مدیریت وضعیت | Authentication/Authorization |
| وابستگی به Cookie | ندارد | اغلب Session ID در Cookie | ندارد |
| مناسب API | بسته به معماری | ممکن است | بسیار رایج |
| قابلیت Stateless | به خودی خود مطرح نیست | معمولاً Stateful | معمولاً Stateless |
نکته مهم این است که این سه مفهوم کاملاً رقیب یکدیگر نیستند.
مثلاً میتوان داشت:
Session
+
Cookie
یا:
JWT
+
Authorization Header
و حتی در برخی معماریها JWT داخل Cookie قرار بگیرد.
بنابراین باید معماری کامل سیستم را در نظر گرفت.
# جمعبندی
Cookie یکی از مفاهیم پایهای توسعه وب و PHP است که برای نگهداری دادههای کوچک در مرورگر کاربر استفاده میشود.
در PHP مهمترین ابزارهای مرتبط با Cookie عبارتاند از:
setcookie()
برای ایجاد یا تغییر Cookie و:
$_COOKIE
برای خواندن Cookie.
همچنین برای Cookieهای حساس باید ویژگیهای امنیتی مهمی مانند:
Secure
HttpOnly
SameSite
را در نظر گرفت.
مهمترین نکته این است که Cookie را با Session یا JWT اشتباه نگیریم.
در بسیاری از سیستمهای وب، این مفاهیم در کنار یکدیگر کار میکنند:
Browser
↓
Cookie
↓
Session ID
↓
Server
↓
Session
در ادامه مسیر یادگیری PHP، بعد از آشنایی با Session و Cookie، بهتر است وارد بخش مهم امنیت PHP شویم؛ زیرا بسیاری از آسیبپذیریهای رایج برنامههای PHP مستقیماً با نحوه دریافت، پردازش و نمایش دادههای کاربر ارتباط دارند.
سوالات متداول
Cookie در PHP چیست؟
Cookie داده کوچکی است که وبسایت میتواند در مرورگر کاربر ذخیره کند و مرورگر در درخواستهای بعدی، در شرایط مربوط به Cookie، آن را ارسال کند.
برای ساخت Cookie در PHP از چه تابعی استفاده میشود؟
از:
setcookie()
استفاده میشود.
برای خواندن Cookie در PHP چه چیزی استفاده میکنیم؟
از:
$_COOKIE
استفاده میشود.
چگونه Cookie را حذف کنیم؟
با ارسال مجدد Cookie با زمان انقضای گذشته:
setcookie('name', '', [
'expires' => time() - 3600,
'path' => '/',
]);
باید تنظیماتی مانند path و در صورت استفاده domain با Cookie اصلی سازگار باشند.
آیا Cookie امن است؟
امنیت Cookie به نحوه استفاده و تنظیم آن بستگی دارد. برای Cookieهای حساس، استفاده از HTTPS و تنظیم ویژگیهایی مانند Secure، HttpOnly و SameSite اهمیت زیادی دارد.
آیا میتوان Password را در Cookie ذخیره کرد؟
خیر. Password نباید در Cookie ذخیره شود. برای Authentication باید از معماری مناسب و روشهای امن مدیریت رمز عبور مانند password_hash() و password_verify() استفاده کرد.
تفاوت Cookie و Session چیست؟
Cookie معمولاً در مرورگر ذخیره میشود، در حالی که داده Session معمولاً سمت سرور مدیریت میشود و مرورگر اغلب Session ID را در Cookie نگهداری میکند.
آیا Cookie جایگزین Database است؟
خیر. Cookie برای دادههای کوچک و مشخصی طراحی شده است و نباید به عنوان جایگزین Database برای ذخیره اطلاعات حجیم یا حساس استفاده شود.





