日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

web防止表單多次提交的方法

表單提交, 應(yīng)該是每個(gè)網(wǎng)頁都會(huì)存在的一個(gè)內(nèi)容。比如填寫用戶信息,填寫個(gè)人資料。

向后臺(tái)傳送數(shù)據(jù)。那么可能就會(huì)有一些搗亂的用戶,或者惡意工具服務(wù)器的

他可能多次點(diǎn)擊提交按鈕。導(dǎo)致服務(wù)器需要解析多次請求

那么就會(huì)出現(xiàn)問題。增加服務(wù)器壓力。

解決方案1:

通過js ,定義一個(gè)全局變量。默認(rèn)是false,當(dāng)用戶點(diǎn)擊提交按鈕。把全局變量該為true.

當(dāng)用戶點(diǎn)擊第二次提交,會(huì)如果是true就不再執(zhí)行提交。

代碼如下

<script type="text/JAVAscript">

var isCommitted = false;//表單是否已經(jīng)提交標(biāo)識(shí),默認(rèn)為false

function dosubmit(){

if(isCommitted==false){

isCommitted = true;//提交表單后,將表單是否已經(jīng)提交標(biāo)識(shí)設(shè)置為true

return true;//返回true讓表單正常提交

} else {

layer.msg("您已經(jīng)提交過了,信息正在查詢請您耐心等待..")

return false;//返回false那么表單將不提交

}

}

</script>

其次需要在表單onsubmit="return dosubmit()"

用戶點(diǎn)擊提交之后默認(rèn)轉(zhuǎn)到該方法下執(zhí)行代碼

以上一種解決方案,只能解決不懂技術(shù)的,小白用戶 但是不能從根本上解決問題

還有一種方式 就是 在服務(wù)器做驗(yàn)證。這也是最佳的解決方案 (推薦使用這種方式)

這種解決方案簡單概括就是:

用戶點(diǎn)擊跳珠表單頁面,會(huì)默認(rèn)生成一個(gè)token值。token值可以是uuid+算法生成的唯一值。方式多種多樣都可以

然后把這個(gè)token值放入session中,后臺(tái)可以通過el表達(dá)式把通過key拿出token值,存入form表單中的hidden隱藏表單中

用戶每次提交,連同表單數(shù)據(jù)和這個(gè)token值發(fā)送到服務(wù)器。服務(wù)器去校驗(yàn)這個(gè)token值。

首先校驗(yàn)這個(gè)token值你要知道有幾種情況

第一種:

表單中沒有token,代表他重復(fù)叫

第二種

當(dāng)前session中沒有token,則用戶代表重復(fù)提交

第三種

存儲(chǔ)在session中的token令牌與表單Token不同,則代表用戶重復(fù)提交

每種情況都要考慮進(jìn)去,

直接干代碼!!不說廢話了

上面幾種情況 我會(huì)單獨(dú) 寫出一個(gè)工具類

/**

* 判斷客戶端提交上來的令牌和服務(wù)器端生成的令牌是否一致

* @param args

* true:表示重復(fù)提交

* false:表示沒有重復(fù)提交

*/

public static boolean isRepeatSubmit(HttpServletRequest request) {

String client_token = request.getParameter("token");

//第一種情況,如果提交表單沒有token則該用戶是重復(fù)提交表單

if (client_token == null){

return true;

}

//取出來存儲(chǔ)在session中的令牌

String server_token = (String) request.getSession().getAttribute("token");

//2、如果當(dāng)前用戶的Session中不存在Token(令牌),則用戶是重復(fù)提交了表單

if (server_token == null){

return true;

}

//3、存儲(chǔ)在Session中的Token(令牌)與表單提交的Token(令牌)不同,則用戶是重復(fù)提交了表單

if (!client_token.equals(server_token)){

return true;

}

return false;

}

2 跳轉(zhuǎn)頁面生產(chǎn)token值

//該方法主要用于跳轉(zhuǎn)JSP頁面,并且防止多次提交創(chuàng)建token

@RequestMApping(value = "findLogisticsPrice")

public String findLogistics(HttpServletRequest request, HttpServletResponse response){

String token = TokenUtils.getAccessToken(UUID.randomUUID().toString());

request.getSession().setAttribute("token", token);

return "modules/logisticsproviders/freightEstimateIndex";

}

生成token值的代碼為:

/**

* 描述:生成Token方法

* @return

*/

public static String getAccessToken(String uuid){

String key = "UZ";

String timestamp = String.valueOf(System.currentTimeMillis());

return HmacSHA256((uuid+timestamp).getBytes(),key.getBytes());

}

3 在業(yè)務(wù)層直接處理邏輯

//判斷用戶是否是重復(fù)提交

boolean b = TokenUtils.isRepeatSubmit(request);

if (b==true){

String ze = "請不要重復(fù)提交!!!";

return ze;

}

當(dāng)業(yè)務(wù)層邏輯快執(zhí)行完時(shí)候

//移除session中的token

request.getSession().removeAttribute("token");

分享到:
標(biāo)簽:表單
用戶無頭像

網(wǎng)友整理

注冊時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定