سی ام اس نویسسی ام اس نویسیاد بگیر، سیستم خودتو بنویس
مجلهتماس با ما
سی ام اس نویسسی ام اس نویس

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

پیوندهای سریع
محصولات فیزیکیمحصولات دیجیتالدوره‌های آموزشی
سی ام اس نویس
مجله سی ام اس نویستماس با ماپنل کاربری
سی ام اس نویس — تمامی حقوق برای سی ام اس نویس محفوظ است. © 1406 تماس با ما09307711941
Cookie در PHP چیست؟ آموزش Cookie با مثال عملی

Cookie در PHP چیست؟ آموزش Cookie با مثال عملی

ممدیر کل سیستم ۲۶ شهریور ۱۴۰۵ ۲۰ دقیقه مطالعه ۲ بازدید
Cookie در PHP چیست؟ آموزش Cookie با مثال عملی

اگر با طراحی سایت و برنامه‌نویسی 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

ویژگیCookieSession
محل اصلی دادهمرورگرمعمولاً سمت سرور
دسترسی 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 تفاوت‌های مهمی دارند.

ویژگیCookieLocalStorage
ارسال خودکار به سروربله، در شرایط مربوط به 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

برای اینکه این سه مفهوم با یکدیگر اشتباه نشوند، به جدول زیر توجه کنید:

ویژگیCookieSessionJWT
ماهیتمکانیزم ذخیره در مرورگرنگهداری StateToken
داده اصلیسمت مرورگرمعمولاً سمت سرورداخل 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 برای ذخیره اطلاعات حجیم یا حساس استفاده شود.

نظرات (0)

نظرات پس از تأیید مدیر نمایش داده می‌شوند

هنوز نظری ثبت نشده است؛ اولین نفر باشید!

مقالات مرتبط

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

ساخت CMS با Laravel 12؛ آموزش ساخت سیستم مدیریت محتوا از صفر

۲۴ دقیقه
ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

ساخت فروشگاه اینترنتی با Laravel 12؛ آموزش پروژه‌محور از صفر تا طراحی هسته فروشگاه

۲۲ دقیقه
ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

ساخت Marketplace با Laravel؛ آموزش طراحی فروشگاه چندفروشندگی

۲۲ دقیقه
مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

مدیریت Queueهای سنگین در Laravel؛ آموزش پردازش کارهای طولانی

۲۲ دقیقه