تفاوت 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) را برای مدت طولانی ذخیره کنید.
از سشن استفاده کنید اگر: با دادههای حساس و امنیتی سر و کار دارید؛ مانند وضعیت لاگین بودن کاربر، سبد خرید، اطلاعات حساب کاربری و کدهای تایید دو مرحلهای.
پرسش و پاسخ
نظری یافت نشد
برای ارسال نظر ابتدا وارد شوید