محتويات الدورة

Express.js / المتوسط: الوحدات والهوية والموائمات / الدرس 9

الهويات وملفات الارتباط ودورة الجلسة

افصل دليل المصادقة عن نقل ملف الارتباط وافرض سياسة الكائن طوال الجلسة.

وقت القراءة التقريبي: 4 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • اشرح ما يثبته معرف الجلسة وسمة ملف الارتباط والهوية كل على حدة.
  • خطط التدوير والانتهاء والخروج والمخزن المشترك دون اختصار ذاكرة غير مناسب للإنتاج.

ملف الارتباط وسيلة نقل لا دليل مستقل

ترويسة Cookie الواردة إدخال من المستدعي. تتحقق المصادقة من الاعتماد أو الجلسة ببروتوكول مختار وتبني هوية بعمر محدد، ثم يقرر التفويض الكائنات والأفعال المسموحة. لا يوفر Express نظام دخول كاملاً بذاته. قد يربط وسيط جلسة معرف المتصفح بحالة خادم، لكنه لا يخترع تحقق كلمة المرور أو استرداد الحساب أو سياسة المستأجر. ضع القرارات في مكونات مراجعة ولا تعتبر ملفاً باسم userId هوية موثوقة لأن متصفحاً أرسله. يظل التحقق ضرورياً قبل وصول أي قيمة إلى خدمة تعتمد على صلاحيات المستخدم.

تضع الخيارات التوضيحية معرف جلسة تحت HttpOnly وSecure وSameSite Lax ومسار محدد. تقيد HttpOnly وصول الشيفرة إلى الملف لكنها لا تمنع كل فعل تنفذه شيفرة أو كل CSRF. تتعلق Secure بالنقل الآمن؛ ويحتاج نشر خلف وكيل تمثيلاً صحيحاً للاتصال الأصلي وفق سياسة ثقة مراجعة. يعتمد SameSite على معنى الموقع في المتصفح وسير العمل العابر للمواقع. تحتاج المدة والمسار قرارات خاصة بالتطبيق. JSON سجل تصميم لا إعداد جلسة عامل ولا ملفاً يحمل سراً، ولا يثبت تطبيق المتصفح لهذه السمات في بيئة فعلية.

json سياسة اصطناعية لملف جلسة
{"cookie":{"httpOnly":true,"secure":true,"sameSite":"lax","path":"/"},"sessionId":"not-contained-in-this-record","store":"reviewed-shared-store-required"}

يحمل السجل بنود سياسة فقط. لا يضع ملفاً في المتصفح ولا يوقع قيمة أو ينشئ مخزن جلسات.

تحتاج حالة الجلسة انتهاء وتدويراً ومسؤول مخزن

يحفظ express-session بيانات الجلسة في الخادم ويحمل الملف معرفاً. لا يستهدف MemoryStore الافتراضي الإنتاج ولا يوفر تصميماً مناسباً مشتركاً دائماً بين العمال. اختر مخزناً مدعوماً بدلالات انتهاء وفشل وتزامن واضحة. جدد هوية الجلسة بعد المصادقة وتغير الامتياز وفق البروتوكول لمعالجة خطر تثبيت الجلسة. يجب أن ينهي الخروج السلطة في الخادم ويمسح الملف بالسمات المطابقة. قد يترك حذف الملف وحده معرفاً مسروقاً صالحاً حتى الانتهاء أو الإلغاء، لأن مكان حمل المعرف ومكان تقرير صلاحيته ليسا الشيء نفسه.

اختبر الانتهاء والإلغاء كشرطين منفصلين

يقبل الشرط المحلي جلسة اصطناعية عندما يقع انتهاؤها في المستقبل ولم تلغ. تصبح غير صالحة عند لحظة الانتهاء نفسها. هذا نموذج مجال لا تحقق اعتماد أو تنفيذ جلسة تشفيري. يوضح حالة حدية لا يستطيع مؤقت واجهة المستخدم فرضها أمنياً وحده. يجب أن يقيم الخادم الأهلية الحالية، بما فيها تغير الحساب والمستأجر الذي تتطلبه السياسة. لا تحتفظ بدور منسوخ إلى الأبد إذا احتاج قرار حساس للإلغاء مصدراً أحدث. يفصل الاختبار بين بلوغ الموعد وقرار الإلغاء كي لا يخفي أحدهما الآخر.

javascript نموذج محلي كامل لأهلية الجلسة
function activeSession(session,now) {
  return !session.revoked && now < session.expiresAt;
}
console.assert(activeSession({expiresAt:1000,revoked:false},999));
console.assert(!activeSession({expiresAt:1000,revoked:false},1000));
console.assert(!activeSession({expiresAt:1000,revoked:true},999));

تنجح الحالة الأولى، ويمنع الانتهاء والإلغاء كل منهما مستقلاً. لا يشغل الاختبار ملف ارتباط أو وسيط جلسة.

نسق هوية الجلسة ونطاق الكائن

لا يصبح المستخدم الداخل مؤهلاً لكل مقرر أو مستأجر. ابن هوية حالية ومررها لسياسة مشتركة للقراءة والكتابة. احم معرف الجلسة من السجلات والعناوين وتخزين العميل الواسع. اربط المخبأ بالنطاق الصحيح وتقاعد حالته والردود المعلقة عند تبدل الهوية. اختبر انقطاع المخزن بسياسة آمنة لا تحول جلسة غير متحقق منها إلى ضيف ذي امتياز. سجل إصدارات الوسيط والمخزن؛ فالأمثلة عقود تنفيذ لا افتراضات محمولة لكل عمارة مصادقة. يظل التزام التطبيق بالصلاحية أهم من وجود ملف ارتباط يبدو مضبوط السمات.

الأخطاء الشائعة وإصلاحها

يصبح أي ملف userId هوية مصادقاً عليها

لماذا يحدث؟
وثق إدخال نقل غير متحقق منه كهوية.
كيف تصلحه؟
تحقق من الجلسة أو الاعتماد بالبروتوكول المراجع.
كيف تتجنب تكراره؟
اختبر قيماً عشوائية وسلطة منتهية.

يترك الخروج جلسة مسروقة قابلة للاستعمال

لماذا يحدث؟
مسح الملف المحلي وحده.
كيف تصلحه؟
أنه السلطة بالخادم وامسح الملف المطابق.
كيف تتجنب تكراره؟
تحقق من الإلغاء مستقلاً عن حذف المتصفح.

يرى العمال حالة دخول مختلفة

لماذا يحدث؟
عومل مخزن عملية محلي كبنية مشتركة مناسبة.
كيف تصلحه؟
اختر مخزناً مراجعاً ودلالات فشل وانتهاء صريحة.
كيف تتجنب تكراره؟
اختبر افتراضات المثيلات المتعددة في دمج مأذون.

اختبر فهمك

1. هل تلغي HttpOnly هجمات CSRF؟

اعرض الحل المشروح

لا؛ تمنع القراءة العادية للملف بالشيفرة، لكن قد يرسله المتصفح مع طلب مناسب وتبدأ الشيفرة أفعالاً. طبق سياسة CSRF والأصل المراجعة وفق الاعتماد. تعالج السمات والمصادقة والتفويض حدوداً مختلفة ولا تختزل في إعداد واحد.

2. لماذا تختبر لحظة الانتهاء نفسها لا قبلها وبعدها بوقت طويل؟

اعرض الحل المشروح

يحدد شمول الحد ويمنع فجوة صلاحية. يستخدم النموذج now < expiresAt فيمنع عند التساوي. يحتاج الدمج ساعة ومخزناً وإلغاء؛ حذف التخزين المنتهي لا يساوي تقرير صلاحية سجل ما زال موجوداً.

أهم ما تعلمته

  • نقل الملف وسلطة الجلسة وتفويض الكائن عقود منفصلة.
  • يحتاج التدوير والانتهاء والإلغاء قرارات دورة حياة بالخادم.

المراجع الرسمية