انقر نقرا مزدوجا فوق انقر نقرا مزدوجا إدراج القرارات ؟

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

سؤال

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

  1. استخدام جافا سكريبت في صفحة ويب للتخفيف الثانية انقر فوق تعطيل الرابط في أول انقر فوق.هذا هو وسيلة سهلة وسريعة للحد من الحوادث من المشكلة ، ولكن ليس القضاء عليه تماما.

  2. التفاف على طلب التنفيذ على قطع الجانب في الصفقة.هذا وقد اعتبر أيضا تكلفة العملية بسبب server تحميل قفل مستويات على الطاولة في السؤال.

  3. قبض المفتاح الأساسي استثناء القيت من قبل فشل إدراج التعرف على هذا النحو ، وأكله.هذا وقد عيوب من (أ) بائع قفل في الحاجة إلى معرفة الفروق الدقيقة في قاعدة البيانات الخاصة الاستثناءات ، و (ب) احتمال عدم تسجيل/التعامل مع الشرعية قاعدة البيانات فشل.

  4. ملحق #3 من قبل محاولة تحديث السجل إذا كان إدراج فشل التحقق من نتيجة التحديث لضمان عوائد 1 سجل المتضررة.

هي الخيارات الأخرى التي لم يتم النظر فيها ؟ هناك إيجابيات وسلبيات من الخيارات المعروضة التي تم تجاهلها ؟ الذي هو أقل من كل الشرور?

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

المحلول

تحتاج إلى تنفيذ "المزامن" رمز نمط.

كيف يعمل هو:قيمة (رمزية) يتم إنشاؤها على الملقم لكل طلب.من هذا المنطلق يجب أن تدرج بعد ذلك في استمارة التقديم.على استلام طلب الخادم رمز العميل رمزية مقارنة وإذا كانت هي نفسها قد يستمر لإضافة السجل الخاص بك.جانب الملقم رمزية ثم يتم تجديدها حتى الطلبات اللاحقة التي تحتوي القديمة المنوال سوف تفشل.

هناك تفسير أكثر دقة حول نصف الطريق أسفل هذه الصفحة.

لست متأكدا ما كنت تستخدم التكنولوجيا ، ولكن الدعامات يوفر الإطار مستوى الدعم هذا النمط.انظر المثال هنا

نصائح أخرى

وضع معرف فريد على الصفحة في حقل مخفي.تقبل سوى رد واحد مع معرف فريد.

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

يبدو أنك بالفعل أجاب على السؤال الخاص بك هناك ، #1 يبدو أن الخيار الوحيد القابل للتطبيق.

خلاف ذلك ، ينبغي عليك حقا أن تفعل كل الخطوات الثلاث-سلامة البيانات يجب أن يتم التعامل معها على مستوى قاعدة البيانات ، ولكن تحقق إضافية (مثل المعاملة الصريحة) في قانون لتجنب roundtrips إلى قاعدة البيانات يمكن أن تكون جيدة الأداء.

المرجع تحتاج إلى تنفيذ "المزامن" رمز نمط.

هذا هو Javascript/HTML جافا لا

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