آموزش رایگان PHP

تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل

1م مرداد 1405 محراب حسن زاده
تفاوت Session و Cookie در PHP؛ راهنمای جامع و کاربردی طبق استاندارد گوگل

مقدمه: چرا به مدیریت وضعیت (State Management) نیاز داریم؟

پروتکل HTTP که پایه و اساس وب است، یک پروتکل Stateless (بدون حالت) است. این یعنی سرور پس از ارسال پاسخ به مرورگر کاربر، همه چیز را فراموش می‌کند و درخواست بعدی کاربر را به عنوان یک کاربر کاملاً جدید در نظر می‌گیرد. برای حل این مشکل و حفظ اطلاعات کاربر در صفحات مختلف (مثل وضعیت ورود به سایت یا سبد خرید)، دو ابزار اصلی داریم: کوکی‌ها (Cookies) و سشن‌ها (Sessions).

در این مقاله تفاوت‌های بنیادین این دو مفهوم را در زبان PHP بر اساس آخرین استانداردهای امنیتی گوگل بررسی می‌کنیم.

کوکی (Cookie) چیست؟

کوکی یک فایل متنی کوچک است که توسط سرور ایجاد شده اما در سیستم خود کاربر (مرورگر) ذخیره می‌شود. هر زمان که کاربر درخواست جدیدی به سرور ارسال می‌کند، این فایل به صورت خودکار همراه با درخواست (در هدر HTTP) به سرور فرستاده می‌شود.

نحوه ساخت کوکی در PHP

برای ایجاد کوکی در PHP از تابع setcookie() استفاده می‌شود:


// ساخت یک کوکی با ماندگاری 1 روز
$cookie_name = "user_login";
$cookie_value = "Ali_Dev";
$expiry_time = time() + (86400 * 1); // 86400 ثانیه در روز

setcookie($cookie_name, $cookie_value, [
    'expires' =--> $expiry_time,
    'path' => '/',
    'domain' => 'example.com',
    'secure' => true,     // فقط روی HTTPS ارسال شود
    'httponly' => true,   // عدم دسترسی جاوااسکریپت برای جلوگیری از XSS
    'samesite' => 'Strict' // جلوگیری از حملات CSRF
]);

سشن (Session) چیست؟

بر خلاف کوکی، سشن داده‌ها را روی سرور ذخیره می‌کند. در واقع یک شناسه منحصربه‌فرد تصادفی به نام Session ID تولید شده و به عنوان یک کوکی موقت در مرورگر کاربر ذخیره می‌شود. هر زمان کاربر درخواستی می‌فرستد، سرور با خواندن این شناسه، پوشه اطلاعات او را در حافظه خود پیدا می‌کند.

نحوه استفاده از سشن در PHP

برای کار با سشن‌ها، ابتدا باید آن را با تابع session_start() شروع کنیم:


session_start(); // شروع سشن

// ذخیره داده‌ها در سشن
$_SESSION["user_id"] = 1402;
$_SESSION["role"] = "administrator";

// دسترسی به داده‌ها در صفحات دیگر
echo "شناسه کاربری: " . $_SESSION["user_id"];

جدول مقایسه تفاوت‌های کلیدی Session و Cookie

ویژگی کوکی (Cookie) سشن (Session)
محل ذخیره‌سازی مرورگر کاربر (Client-side) وب‌سرور (Server-side)
امنیت داده‌ها کمتر (قابل ویرایش توسط کاربر) بسیار بالا (دسترس‌ناپذیر برای کلاینت)
ظرفیت ذخیره‌سازی محدود به 4 کیلوبایت نامحدود (بسته به هارد دیسک سرور)
طول عمر (Lifespan) قابل تنظیم (حتی سال‌ها پس از بستن مرورگر) معمولاً با بستن مرورگر از بین می‌رود
تاثیر روی سرعت لود با افزایش تعداد، ترافیک هدرها بالا می‌رود بسیار ناچیز (تنها شناسه سشن ارسال می‌شود)

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

گوگل در فرآیند رتبه‌بندی و امنیت وب‌سایت‌ها (SEO و Lighthouse)، به شدت به امنیت اطلاعات کاربران اهمیت می‌دهد. اگر از کوکی استفاده می‌کنید، رعایت موارد زیر الزامی است:

  • فعال‌سازی HttpOnly: مانع دسترسی کدهای مخرب جاوااسکریپت به کوکی شما می‌شود و خطر حملات XSS را کاهش می‌دهد.
  • فعال‌سازی Secure flag: تضمین می‌کند کوکی فقط از کانال امن HTTPS عبور کند.
  • خصیصه SameSite: با تنظیم روی Lax یا Strict، از حملات هک خطرناک CSRF (جعل درخواست بین‌سایتی) جلوگیری کنید.

چه زمانی از کوکی و چه زمانی از سشن استفاده کنیم؟

از کوکی استفاده کنید اگر: می‌خواهید اطلاعات غیرحساسی مانند تم سایت (تاریک/روشن)، زبان انتخابی کاربر، یا ویژگی "مرا به خاطر بسپار" (Remember Me) را برای مدت طولانی ذخیره کنید.

از سشن استفاده کنید اگر: با داده‌های حساس و امنیتی سر و کار دارید؛ مانند وضعیت لاگین بودن کاربر، سبد خرید، اطلاعات حساب کاربری و کدهای تایید دو مرحله‌ای.


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

استفاده از CSS Scoped و استایل‌دهی به کامپوننت‌ها در Vue.js | آموزش کاربردی
23م آذر 1404

استفاده از CSS Scoped و استایل‌دهی به کامپوننت‌ها در Vue.js | آموزش کاربردی

مطالعه بیشتر
آموزش کامنت‌ها و کاراکترهای خاص در HTML و CSS: نحوه استفاده و مدیریت
23م مرداد 1402

آموزش کامنت‌ها و کاراکترهای خاص در HTML و CSS: نحوه استفاده و مدیریت

مطالعه بیشتر
کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب
11م آبان 1403

کار با فیلترهای CSS: آموزش استفاده از blur، brightness و contrast برای افکت‌های تصویری جذاب

مطالعه بیشتر
آموزش جامع مدیریت خطاها در PHP بر اساس استانداردهای گوگل
1م مرداد 1405

آموزش جامع مدیریت خطاها در PHP بر اساس استانداردهای گوگل

مطالعه بیشتر
آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child
10م شهریور 1402

آموزش Pseudo-classes در CSS: تغییر استایل عناصر با hover، focus و nth-child

مطالعه بیشتر
توابع فلش (Arrow Functions) در جاوا اسکریپت: ساده‌سازی کد با استفاده از ES6
2م شهریور 1403

توابع فلش (Arrow Functions) در جاوا اسکریپت: ساده‌سازی کد با استفاده از ES6

مطالعه بیشتر
آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها
2م آبان 1403

آموزش تغییر المان‌های DOM: ویرایش متن، سبک‌ها و کلاس‌ها در جاوا اسکریپت - راهنمای کامل با مثال‌ها

مطالعه بیشتر
آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب
29م مرداد 1402

آموزش تگ‌های زمان و مکان در HTML: استفاده از time و location در صفحات وب

مطالعه بیشتر
راهنمای کامل جداول HTML: آموزش ساخت و بهینه‌سازی سئو
21م مرداد 1402

راهنمای کامل جداول HTML: آموزش ساخت و بهینه‌سازی سئو

مطالعه بیشتر
مفهوم برنامه‌نویسی هم‌زمان و ناهم‌زمان در جاوا اسکریپت: تفاوت‌ها، مثال‌ها و کاربردها
29م مهر 1403

مفهوم برنامه‌نویسی هم‌زمان و ناهم‌زمان در جاوا اسکریپت: تفاوت‌ها، مثال‌ها و کاربردها

مطالعه بیشتر
آموزش کامل include و require در PHP + تفاوت‌های کلیدی و کاربردی
1م مرداد 1405

آموزش کامل include و require در PHP + تفاوت‌های کلیدی و کاربردی

مطالعه بیشتر
آموزش استفاده از position در CSS: نحوه موقعیت‌دهی عناصر در صفحات وب
9م آبان 1403

آموزش استفاده از position در CSS: نحوه موقعیت‌دهی عناصر در صفحات وب

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد