تسجيل الدخول "تذكرني" لموقع الويب - مشكلة مع متصفحات/أجهزة الكمبيوتر المختلفة

StackOverflow https://stackoverflow.com/questions/4203029

سؤال

أحاول تنفيذ وظيفة تسجيل الدخول "تذكرني" لموقع ASP.NET MVC الذي أقوم ببنائه. أحاول استخدام هذا النهج http://jaspan.com/improved_persence_login_cookie_best_practice (انظر "تصميم ميلر" بالقرب من الأعلى) وجعلها تعمل إلى حد ما.

وبالتالي فإن تدفق العمل هو:

  1. يقوم المستخدم بتسجيل الدخول وإصدار سلسلة عشوائية آمنة من الناحية التشفية + معرف قاعدة البيانات الخاصة بهم كملف تعريف ارتباط مستمر (يدوم حوالي 30 يومًا). يتم تخزين السلسلة الآمنة في قاعدة البيانات بجوار سجل حساب المستخدم الخاص بهم.
  2. يعود المستخدم لاحقًا إلى الموقع حيث يعرض المتصفح ملف تعريف الارتباط تسجيل الدخول ، ويتم البحث عن المعرف والمفتاح الآمن في قاعدة البيانات وإذا تم العثور على المطابقة ، يتم مصادقة المستخدم تلقائيًا.
  3. بمجرد مصادقة مفتاح آمن جديد ، يتم تخزينه في قاعدة البيانات وإصدار ملفات تعريف الارتباط الجديدة.

لدي هذا يعمل بشكل جيد ، ومع ذلك ، لا يعمل بشكل جيد للغاية إذا قام المستخدم بتسجيل الدخول من متصفحات أو أجهزة الكمبيوتر المتعددة. من الواضح أن المتصفحات المختلفة ستنتهي بمفتاح آمن مختلف مخزّن كملف تعريف ارتباط ، وبالتالي يصبح تدفق العمل:

  1. يتم إصدار سجلات المستخدم من المستعرض A ، مفتاح آمن كملف تعريف ارتباط ، يتم تخزين المفتاح في قاعدة البيانات.
  2. يتم إصدار سجلات المستخدم من المستعرض B ، مفتاح آمن مختلف كملف تعريف ارتباط. يتم تخزين المفتاح أيضًا في قاعدة البيانات ، ولكن الكتابة فوق المفتاح الذي تم إنشاؤه من المتصفح A.
  3. يزور المستخدم موقع المتصفح A مرة أخرى ، يقدم Browser ملف تعريف الارتباط الصادر من الخطوة 1. ولكن لم يعد يتطابق لأنه تم استبدال المفتاح الآمن في الخطوة 2. لذلك يتعين على المستخدم تسجيل الدخول مرة أخرى. يتم إنشاء مفتاح جديد آخر والكتابة فوق المفتاح الصادر إلى Browser B.
  4. يزور المستخدمون من المتصفح B مرة أخرى ، لا يتطابق المفتاح ، ويجب تسجيل الدخول مرة أخرى وما إلى ذلك. إلخ.

كيف يمكنني حل هذا؟ هل أحتاج إلى تخزين وصيانة مفاتيح متعددة في قاعدة البيانات؟ هل أنا حتى في هذا الطريق الصحيح؟ لقد لاحظت أن Stackoverflow يبدو أنه يدير هذا ويتذكرني من متصفحات وأجهزة الكمبيوتر المختلفة.

هل كانت مفيدة؟

المحلول

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

يشير الوصف الخاص بك إلى أنك تقوم بتخزين السلسلة العشوائية داخل جدول المستخدم ، مما سيسمح فقط بتسجيل الدخول في ذلك الوقت.

نصائح أخرى

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

إليك بعض الروابط للمساعدة في هذا التنفيذ:

مشاكل قاعدة البيانات عند السماح بمستعرضات متعددة السجل المستمر

الدليل النهائي لمصادقة موقع الويب القائم على النماذج

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top