شرح صفوف ومحتوى الفقرة
عندما يتغير مستوى صلاحيات المستخدم—وخصوصاً لحظة تسجيل الدخول أو ترقية الصلاحية أو تغيير كلمة المرور—يجب استدعاء الدالة session_regenerate_id(true).
- يؤدي تمرير المعامل
true(أي$delete_old_session = true) إلى حذف ملف الجلسة القديم فوراً من الخادم. - يتلقى المتصفح كوكيز جديدة بالمعرف المحدث بينما تظل جميع البيانات المحفوظة داخل مصفوفة
$_SESSIONسليمة كما هي. - يبطل هذا الإجراء تماماً أي معرف جلسة قديم كان موجوداً قبل تسجيل الدخول.
يضمن تدوير معرف الجلسة عند تعبئة $_SESSION["user_id"] عدم اشتراك جلسة المستخدم الموثقة في نفس المعرف القديم لجلسة الزائر.
PHP
<?php
function loginUserSession(int $userId, string $role): array {
// In web SAPI: session_regenerate_id(true);
$_SESSION['user_id'] = $userId;
$_SESSION['role'] = $role;
$_SESSION['authenticated'] = true;
$_SESSION['last_activity'] = 1762550000;
return $_SESSION;
}
$_SESSION = [];
$state = loginUserSession(42, 'admin');
echo "Logged in user #" . $state['user_id'] . " (" . $state['role'] . ")\n";