شرح صفوف ومحتوى الفقرة
لا تخزن أبداً معرف المستخدم أو كلمة مروره في كوكي "تذكرني"؛ بل استخدم توكن مقسوماً إلى selector:validator بحيث يُخزن فقط ناتج تجزئة validator في قاعدة البيانات.
- يُستخدم
selectorللبحث السريع المفهرس عن سجل التوكن في قاعدة البيانات. - تُجزّأ قيمة
validatorالعشوائية السرية بـhash("sha256", $validator)وتقارن عبرhash_equals(). - حتى لو تسرب جدول التوكنات من قاعدة البيانات، لن يتمكن المهاجم من تزوير كوكي الدخول!
يجمع الكوكي بين selector:validator بينما تحفظ قاعدة البيانات فقط تجزئة SHA-256 للمفتاح السري.
PHP
<?php
$selector = bin2hex(random_bytes(8));
$validator = bin2hex(random_bytes(16));
$cookieValue = "$selector:$validator";
$dbHashedValidator = hash('sha256', $validator);
[$inSel, $inVal] = explode(':', $cookieValue, 2);
$valid = hash_equals($dbHashedValidator, hash('sha256', $inVal));
echo "Remember-Me Token Verified: " . ($valid ? 'YES' : 'NO') . "\n";