شرح صفوف ومحتوى الفقرة
يجب أن يقبل معالج تسجيل الخروج طلبات POST المحمية بتوكن CSRF فقط، ويفرغ $_SESSION، ويلغي كوكي الجلسة في المتصفح، ثم يستدعي session_destroy().
- لماذا نستخدم
POST /logout؟ لأن جعل الخروج رابطGETيسمح لأي وسم صورة خبيث<img src="/logout">بإخراج المستخدم قسرياً! - أفرغ مصفوفة
$_SESSION = []في الذاكرة قبل تدمير ملف الجلسة. - احذف توكن "تذكرني" من قاعدة البيانات ومن كوكيز المتصفح معاً عند الخروج.
تفريغ المصفوفة $_SESSION = [] يزيل جميع بيانات الجلسة فوراً من الذاكرة الحالية.
| عملية المصادقة | الإجراء الأمني الإلزامي | الأهمية الأمنية |
|---|---|---|
| Login Failure | Unified error message + dummy hash check | Prevents user email enumeration |
| Login Success | session_regenerate_id(true) | Prevents session fixation attacks |
| Protected Route | Auth guard + exit; after redirect | Stops unauthorized execution immediately |
| Remember Me Cookie | Split selector:validator (SHA-256 in DB) | Prevents token theft from DB leaks |
| Logout Endpoint | POST /logout + CSRF + clear cookie | Prevents forced cross-site logout & replay |
PHP
<?php
$_SESSION = ['user_id' => 42, 'user_role' => 'admin'];
// Step 1: Clear session array in memory
$_SESSION = [];
// Step 2: Verify memory is clean before session_destroy()
echo "Active Session Keys: " . count($_SESSION) . "\n";
echo "Logout complete -> Redirect to /login\n";
خلاصة المعرفة ومحطة الانتقال
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
يجب أن يقبل معالج تسجيل الخروج طلبات POST المحمية بتوكن CSRF فقط، ويفرغ $_SESSION، ويلغي كوكي الجلسة في المتصفح، ثم يستدعي session_destroy(). لماذا نستخدم POST /logout؟ لأن جعل الخروج رابط GET يسمح لأي وسم صورة خبيث <img src="/logout"> بإخراج المستخدم قسرياً! أفرغ مصفوفة $_SESSION = [] في الذاكرة قبل تدمير ملف الجلسة. احذف توكن "تذكرني" من قاعدة البيانات ومن كوكيز المتصفح معاً عند الخروج.