1 جافا سكريبت، قم بتعيين متغير والسماح بالإرسال مرة واحدة فقط.
var checkSubmitFlg = false;
function checkSubmit() {
if (checkSubmitFlg == true) {
return false
}
checkSubmitFlg = true
;
document.ondblclick = function docondblclick()
{
window.event .returnValue = false;
}
document.onclick = function doconclick() {
if (checkSubmitFlg) {
window.event.returnValue = false
}
}
2 لا تزال تستخدم جافا سكريبت، اضبط زر الإرسال أو الصورة لتعطيلها
onsubmit="getElById('submitInput').disabled = true; return true;"> < / html:form> 3 استخدم آلية رمز المزامنة الخاصة بالدعامات لحل مشكلة الإرسالات المتكررة في تطبيقات الويب، كما توفر Struts أيضًا تطبيقًا مرجعيًا. المبدأ الأساسي: قبل معالجة الطلب الوارد، سيقوم الخادم بمقارنة قيمة الرمز المميز الموجودة في الطلب مع قيمة الرمز المميز المحفوظة في جلسة المستخدم الحالية لمعرفة ما إذا كان هناك تطابق. بعد معالجة الطلب وقبل إرسال الرد إلى العميل، سيتم إنشاء رمز مميز جديد بالإضافة إلى تمريره إلى العميل، سيحل هذا الرمز المميز أيضًا محل الرمز المميز القديم المحفوظ في جلسة المستخدم. بهذه الطريقة، إذا عاد المستخدم إلى صفحة الإرسال السابقة وقام بالإرسال مرة أخرى، فسيكون الرمز المميز الذي مرره العميل غير متوافق مع الرمز المميز الموجود على جانب الخادم، وبالتالي يمنع عمليات الإرسال المتكررة بشكل فعال. if (isTokenValid(request, true)) { // الكود الخاص بك هنا return Mapping.findForward("success"); } else { saveToken(request); return mapping.findForward("submitagain" } الدعامات بناءً على جلسة المستخدم يتم استخدام المعرف ووقت النظام الحالي لإنشاء رمز مميز فريد (لكل جلسة) لتنفيذ محدد، يرجى الرجوع إلى طريقة generatorToken() في فئة TokenProcessor. 1. // التحقق من رمز التحكم في المعاملة. 2. في الإجراء: // // value="6aa35341f25184fd996c4c918255c3ae"> if (!isTokenValid(request)) error.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.transaction.token") ) ; setToken(request); // احذف الرمز المميز في الجلسة 3. يحتوي الإجراء على طريقة لإنشاء الرمز المحمي String generatorToken(HttpServletRequest request) { HttpSession session = request.getSession() ; ().getBytes(); byte now[] = ( )).toString().getBytes(); MessageDigest.getInstance ("MD5"); ( now); ( md.digest ( ) )) ;