您好,登錄后才能下訂單哦!
本篇內容主要講解“防止重復提交的方法有哪些”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“防止重復提交的方法有哪些”吧!
1 javascript ,設置一個變量,只允許提交一次
<script language="javascript"> var checkSubmitFlg = false; function checkSubmit() { if (checkSubmitFlg == true) { return false; } checkSubmitFlg = true; return true; } document.ondblclick = function docondblclick() { window.event.returnValue = false; } document.onclick = function doconclick() { if (checkSubmitFlg) { window.event.returnValue = false; } } </script>
2 還是javascript,將提交按鈕或者image置為disable
3 利用struts的同步令牌機制
利用同步令牌(Token)機制來解決Web應用中重復提交的問題,Struts也給出了一個參考實現。 基本原理:
服務器端在處理到達的請求之前,會將請求中包含的令牌值與保存在當前用戶會話中的令牌值進行比較,看是否匹配。在處理完該請求后,且在答復發送給客戶端之前,將會產生一個新的令牌,該令牌除傳給客戶端以外,也會將用戶會話中保存的舊的令牌進行替換。這樣如果用戶回退到剛才的提交頁面并再次提交的話,客戶端傳過來的令牌就和服務器端的令牌不一致,從而有效地防止了重復提交的發生。
if (isTokenValid(request, true)) { // your code here return mapping.findForward("success"); } else { saveToken(request); return mapping.findForward("submitagain"); } Struts根據用戶會話ID和當前系統時間來生成一個唯一(對于每個會話)令牌的, 具體實現可以參考TokenProcessor類中的 generateToken()方法。 1.驗證事務控制令牌,會自動根據session中標識生成一個隱含input代表令牌,防止兩次提交 2. 在action中: if (!isTokenValid(request)) errors.add(ActionErrors.GLOBAL_ERROR, new ActionError("error.transaction.token")); resetToken(request); // 刪除session中的令牌 3. action有這樣的一個方法生成令牌 protected String generateToken(HttpServletRequest request) { HttpSession session = request.getSession(); try { byte id[] = session.getId().getBytes(); byte now[] = new Long(System.currentTimeMillis()).toString().getBytes(); MessageDigest md = MessageDigest.getInstance("MD5"); md.update(id); bmd.update(now); return (toHex(md.digest())); } catch (IllegalStateException e) { return (null); } catch (NoSuchAlgorithmException e) { return (null); } }
到此,相信大家對“防止重復提交的方法有哪些”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。