1 จาวาสคริปต์ ตั้งค่าตัวแปรและอนุญาตให้ส่งเพียงครั้งเดียวเท่านั้น
var checkSubmitFlg = false;
ฟังก์ชัน 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 ยังคงใช้ javascript อยู่ ให้ตั้งค่าปุ่มส่งหรือรูปภาพเพื่อปิดการใช้งาน
onsubmit="getElById('submitInput').disabled = true; return true;"> < / html:form> 3 ใช้กลไกโทเค็นการซิงโครไนซ์ของ struts เพื่อแก้ไขปัญหาการส่งซ้ำในเว็บแอปพลิเคชัน Struts ยังมีการใช้งานอ้างอิง หลักการพื้นฐาน: ก่อนที่จะประมวลผลคำขอที่เข้ามา เซิร์ฟเวอร์จะเปรียบเทียบค่าโทเค็นที่อยู่ในคำขอกับค่าโทเค็นที่บันทึกไว้ในเซสชันผู้ใช้ปัจจุบันเพื่อดูว่ามีค่าที่ตรงกันหรือไม่ หลังจากที่คำขอได้รับการประมวลผลและก่อนที่การตอบกลับจะถูกส่งไปยังไคลเอนต์ โทเค็นใหม่จะถูกสร้างขึ้น นอกเหนือจากการส่งต่อไปยังไคลเอนต์แล้ว โทเค็นนี้จะแทนที่โทเค็นเก่าที่บันทึกไว้ในเซสชันผู้ใช้ด้วย ด้วยวิธีนี้ หากผู้ใช้กลับไปที่หน้าการส่งก่อนหน้าและส่งอีกครั้ง โทเค็นที่ไคลเอนต์ส่งผ่านจะไม่สอดคล้องกับโทเค็นบนฝั่งเซิร์ฟเวอร์ ดังนั้นจึงป้องกันการส่งซ้ำได้อย่างมีประสิทธิภาพ if (isTokenValid(request, true)) { // รหัสของคุณที่นี่ return mapping.findForward("success"); } else { saveToken(request); mapping.findForward ("submitagain"); } ID และเวลาระบบปัจจุบันใช้เพื่อสร้างโทเค็นที่ไม่ซ้ำกัน (สำหรับแต่ละเซสชัน) สำหรับการใช้งานเฉพาะ โปรดดูเมธอด GenerateToken() ในคลาส TokenProcessor 1. //ตรวจสอบโทเค็นควบคุมธุรกรรม 2. ในการดำเนินการ: // // value="6aa35341f25184fd996c4c918255c3ae"> if (!isTokenValid(request)) errors.add(ActionErrors.GLOBAL_ERROR, New ActionError("error.transaction.token") ) ; ResetToken(คำขอ); //ลบโทเค็นในเซสชัน 3 การดำเนินการมีวิธีสร้างโทเค็น ที่ ได้รับการป้องกัน String GenerateToken(คำขอ HttpServletRequest) { HttpSession session = request.getSession( ] = session .getId ().getBytes(); ไบต์ตอนนี้[] = ใหม่ ยาว(System.currentTimeMillis()).toString().getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update (id) ; .update(ตอนนี้); ( md.digest())); } catch (IllegalStateException e) { return (null); } catch (NoSuchAlgorithmException e) { return (null) ;