Cookies In PHP

🥇 1. ما هي الكوكيز Cookies؟
🔹 التعريف:

الكوكيز هي ملفات صغيرة يتم تخزينها في جهاز المستخدم (المتصفح) تحتوي على بيانات تُستخدم لتذكُّر المستخدم أو تتبع نشاطه بين الصفحات.

✅ الفائدة:
  • تذكُّر المستخدم بعد زيارته للموقع.
  • حفظ تفضيلات المستخدم مثل اللغة.
  • تسجيل الدخول التلقائي.
  • متابعة المستخدم لأغراض الإعلانات أو التحليل.
⚠️ المحاذير:
  • يمكن قراءتها من أي شخص لديه صلاحية الوصول للمتصفح.
  • لا تُستخدم لتخزين بيانات حساسة (كلمات المرور، بيانات بنكية).
  • تتأثر بحظر الكوكيز في المتصفح.
🥈 2. إنشاء Cookie باستخدام setcookie()
🔸 الصيغة الأساسية:
setcookie(name, value, expire, path, domain, secure, httponly);
PHP
🔹 أهم المعاملات:
المعاملالشرح
nameاسم الكوكي
valueالقيمة التي سيتم تخزينها
expireوقت الانتهاء بتنسيق timestamp (مثل: time() + 3600)
pathالمسار الذي تظهر فيه الكوكيز (مثلاً /)
domainالنطاق المسموح له باستخدام الكوكيز
secureتُرسل فقط في الاتصال المشفّر (HTTPS)
httponlyلا يمكن الوصول إليها من JavaScript
✅ مثال بسيط:
setcookie("username", "yasin", time() + 3600); // تدوم ساعة
PHP
🥉 3. قراءة Cookie باستخدام $_COOKIE
if (isset($_COOKIE['username'])) {
    echo "مرحبا " . $_COOKIE['username'];
} else {
    echo "لا توجد كوكي محفوظة باسم username";
}
PHP

$_COOKIE هو مصفوفة تحتوي على جميع الكوكيز الموجودة حاليًا.

🏅 4. تعديل Cookie موجودة

لا يمكن تعديل الكوكي مباشرة، لكن:
✅ يتم تعديلها بإعادة إنشائها بنفس الاسم:

setcookie("username", "newValue", time() + 3600);
PHP
🎯 5. حذف Cookie

نُعطيها وقتًا منتهيًا بالماضي:

setcookie("username", "", time() - 3600);
PHP
🔎 6. التحقق من وجود Cookie
if (isset($_COOKIE['username'])) {
    // موجودة
}
PHP
⏳ 7. مدة حياة Cookie
  • مؤقتة: بدون expire، تنتهي عند إغلاق المتصفح.
  • دائمة: مع expire، وتبقى حتى تنتهي أو يحذفها المستخدم.
📁 8. مكان تخزين الكوكيز
  • يتم تخزينها في المتصفح (ليس على السيرفر).
  • يمكن عرضها عبر أدوات التطوير في المتصفح (DevTools > Application > Cookies).
🔐 9. كوكيز آمنة – Secure / HttpOnly / SameSite
الخيارالفائدة
Secureتمنع إرسال الكوكيز في HTTP العادي، فقط HTTPS
HttpOnlyتمنع JavaScript من الوصول إلى الكوكي
SameSiteتمنع هجمات CSRF
setcookie("auth", "abc123", time()+3600, "/", "", true, true);
PHP
⚙️ 10. قيود على الكوكيز
  • الحجم الأقصى 4096 بايت (4 KB)
  • العدد الأقصى 20–50 كوكيز لكل نطاق
  • لا يُخزَّن فيها بيانات كثيرة أو سرية
🔁 11. الفرق بين setcookie() و setrawcookie()
الوظيفةالفرق
setcookie()تُشفّر القيمة تلقائيًا (URL-encoded)
setrawcookie()لا تقوم بالتشفير

مثال:

setcookie("test", "a+b"); // تُصبح a%2Bb
setrawcookie("test", "a+b"); // تبقى a+b
PHP
💡 12. تطبيق عملي على Cookies
✅ مثال: تذكُّر اسم المستخدم
// عند تسجيل الدخول
setcookie("username", "Yasin", time() + (86400 * 30)); // 30 يوم

// في الصفحة الرئيسية
if (isset($_COOKIE['username'])) {
    echo "أهلاً بعودتك، " . $_COOKIE['username'];
}
PHP
🆚 13. مقارنة بين Cookie و Session
المعيارCookieSession
التخزينفي المتصفحفي الخادم
الأمانأقل أمانًاأكثر أمانًا
الصلاحيةحسب الزمنحسب الجلسة
الحجمصغيريمكن أن يكون أكبر
📌 14. نصائح وتوصيات
✅ ما يجب فعله:
  • استخدم HttpOnly لحماية الكوكيز.
  • استخدم Secure إذا كنت على HTTPS.
  • شفر المعلومات إن كانت خاصة.
  • نظّف الكوكيز عند تسجيل الخروج.
❌ ما يجب تجنّبه:
  • لا تخزن كلمات مرور أو بيانات بطاقة ائتمان.
  • لا تعتمد على الكوكيز فقط في التحقق من الهوية.