1 جافا سكريبت، قم بتعيين متغير والسماح بالإرسال مرة واحدة فقط.
<script language="javascript">
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
}
}
</script>
<html:form action="myAction.do"method="post" onsubmit="return checkSubmit();">
2 لا تزال تستخدم جافا سكريبت، اضبط زر الإرسال أو الصورة لتعطيلها
<html:form action="myAction.do" الطريقة ="post"
onsubmit="getElById('submitInput').disabled = true; return true;">
<html:image styleId="submitInput" src="images/ok_b.gif" border="0" />
< / html:form>
3 استخدم آلية رمز المزامنة الخاصة بالدعامات
لحل مشكلة الإرسالات المتكررة في تطبيقات الويب، كما توفر Struts أيضًا تطبيقًا مرجعيًا.
المبدأ الأساسي:
قبل معالجة الطلب الوارد، سيقوم الخادم بمقارنة قيمة الرمز المميز الموجودة في الطلب مع قيمة الرمز المميز المحفوظة في جلسة المستخدم الحالية لمعرفة ما إذا كان هناك تطابق. بعد معالجة الطلب وقبل إرسال الرد إلى العميل، سيتم إنشاء رمز مميز جديد بالإضافة إلى تمريره إلى العميل، سيحل هذا الرمز المميز أيضًا محل الرمز المميز القديم المحفوظ في جلسة المستخدم. بهذه الطريقة، إذا عاد المستخدم إلى صفحة الإرسال السابقة وقام بالإرسال مرة أخرى، فسيكون الرمز المميز الذي مرره العميل غير متوافق مع الرمز المميز الموجود على جانب الخادم، وبالتالي يمنع عمليات الإرسال المتكررة بشكل فعال.
if (isTokenValid(request, true)) {
// الكود الخاص بك هنا
return Mapping.findForward("success");
} else {
saveToken(request);
return mapping.findForward("submitagain" }
الدعامات
بناءً على جلسة المستخدم يتم استخدام المعرف ووقت النظام الحالي لإنشاء رمز مميز فريد (لكل جلسة) لتنفيذ محدد، يرجى الرجوع إلى طريقة generatorToken() في فئة TokenProcessor.
1. // التحقق من رمز التحكم في المعاملة. <html:form> سيقوم تلقائيًا بإنشاء رمز مميز لممثل الإدخال الضمني بناءً على المعرف في الجلسة لمنع الإرسال المزدوج
2. في الإجراء:
//<input type="hidden" name ="org.apache.struts.taglib.html.TOKEN"
// 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[] =
new Long(System.currentTimeMillis(
)).toString().getBytes();
MessageDigest.getInstance
("MD5");
.update(
now);
return (toHex(
md.digest
(
)
))
;