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

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

1405/05/01 20:14 محراب حسن زاده
تفاوت 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) را برای مدت طولانی ذخیره کنید.

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


پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

راهنمای کامل لیست‌ها در HTML: آموزش انواع و اصول سئو
1402/05/20 22:02

راهنمای کامل لیست‌ها در HTML: آموزش انواع و اصول سئو

مطالعه بیشتر
آموزش توسعه بازی‌های ساده با استفاده از جاوا اسکریپت و Canvas API: راهنمای گام به گام
1403/08/05 21:06

آموزش توسعه بازی‌های ساده با استفاده از جاوا اسکریپت و Canvas API: راهنمای گام به گام

مطالعه بیشتر
آموزش جامع پارامترها و مقادیر بازگشتی در PHP (بر اساس استانداردهای مدرن)
1405/04/16 01:14

آموزش جامع پارامترها و مقادیر بازگشتی در PHP (بر اساس استانداردهای مدرن)

مطالعه بیشتر
آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها
1402/06/10 18:07

آموزش Responsive Design با استفاده از Media Queries: طراحی واکنش‌گرا برای تمامی دستگاه‌ها

مطالعه بیشتر
آموزش کار با flex-grow، flex-shrink و flex-basis در CSS Flexbox: مدیریت اندازه و فضای عناصر
1403/08/11 20:50

آموزش کار با flex-grow، flex-shrink و flex-basis در CSS Flexbox: مدیریت اندازه و فضای عناصر

مطالعه بیشتر
آموزش ساخت دیتابیس و جدول برای پروژه PHP طبق استاندارد گوگل
1405/05/04 23:38

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

مطالعه بیشتر
آموزش جامع اتصال به دیتابیس با PDO در PHP
1405/05/04 23:42

آموزش جامع اتصال به دیتابیس با PDO در PHP

مطالعه بیشتر
نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue
1402/06/28 00:41

نصب Vue.js و ایجاد پروژه ساده: آموزش گام‌به‌گام راه‌اندازی Vue

مطالعه بیشتر
راهنمای کامل تگ‌های < img > و < a > در HTML: تصاویر و لینک‌ها
1402/05/21 00:27

راهنمای کامل تگ‌های < img > و < a > در HTML: تصاویر و لینک‌ها

مطالعه بیشتر
آشنایی با Vue CLI و ایجاد پروژه‌های پیشرفته در Vue.js | راهنمای کامل
1404/09/29 21:09

آشنایی با Vue CLI و ایجاد پروژه‌های پیشرفته در Vue.js | راهنمای کامل

مطالعه بیشتر
آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل
1405/05/04 23:25

آموزش ساختار استاندارد و بهینه پروژه PHP به سبک گوگل

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

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

مطالعه بیشتر

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