激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談利用Session防止表單重復提交

淺談利用Session防止表單重復提交

2021-02-28 11:00amork Java教程

這篇文章主要介紹了淺談利用Session防止表單重復提交,簡單介紹表單重復提交的情況,分析,以及解決方法代碼示例,具有一定借鑒價值,需要的朋友可以了解下。

解決項目中表單重復提交的問題,在平常的項目中有以下幾種可能出現表單重復提交的情況,比如說:

1.由于服務器緩慢或者網絡延遲的原因,重復點擊提交按鈕

2.已經提交成功,但是還不停刷新成功頁面

3.已經提交成功,通過回退,再次點擊提交按鈕。

這些情況都可能使數據庫中產生過多相同的冗余數據,浪費數據庫資源。只有轉發才會出現,重定向則不會。

針對第一種情況的解決方案(使用JavaScript),對后面兩種無效:

首先在頁面中添加如下格式的JavaScript代碼

?
1
2
3
4
5
6
7
var submitFlag=false;
function checksubmit(){
if(!submitFlag){
 submitFlag=true;
 document.forms[0].submit();
 }
}

(1)當提交按鈕的type屬性為button時:

設置按鈕的onClick=”checksubmit();”即可。

(2)當提交按鈕的type屬性為submit時:

設置按鈕的onClick=”checksubmit();”,并在<form>標簽中增加onsubmit=”returnfalse”。因為submit按鈕的自動提交時在點擊事件提交之后,將onsubmit設置為”returnfalse”,submit按鈕的自動提交就會失效。

對于后面兩種情況,可以使用session解決,其原理是在運行添加信息頁面時在session中放置信息,然后頁面提交信息給servlet處理,servlet獲取session中的信息,如果session中有信息不為空則將信息插入數據庫,然后刪除session中的信息,下次再提交表單時session中的信息為空,那么則不執行存儲信息過程。

但是單純使用session有其局限性,所以在實際開發中,一般使用利用session結合UUID解決表單的重復提交,代碼如下:

定義一個UuidToken類

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
public class UuidToken {
    private static UuidToken UuidToken=new UuidToken();
    private UuidToken(){
    }
    public static UuidToken getUuidToken() {
        return UuidToken;
    }
    public synchronized String getUUIDAsStr(HttpServletRequest request){
        HttpSession session=request.getSession();
        String uuidStr=UUID.randomUUID().toString();
        if(uuidStr!=null){
            session.setAttribute("session.uuid", uuidStr);
        }
        return uuidStr;
    }
    /**
 * 判斷session中保存的uuid和jsp頁面上的uuid是否相等
 */
    public synchronized Boolean isUUIDValidate(HttpServletRequest request) {
        //獲取已存在的session
        HttpSession session=request.getSession(false);
        if(session==null){
            return false;
        }
        String sessionuuid = (String)session.getAttribute ("session.uuid");
        if(sessionuuid==null){
            return false;
        }
        String htmluuid=request.getParameter("html.uuid");
        if(htmluuid==null){
            return false;
        }
        return sessionuuid.equals(htmluuid);
    }
    /**
 * 刪除uuid
 */
    public synchronized void resetUUID(HttpServletRequest request) {
        HttpSession session=request.getSession(false);
        if(session==null){
            return;
        }
        session.removeAttribute("session.uuid");
    }
}

在jsp頁面增加一個隱藏域,利用uuid生成一個唯一的標識號,賦給隱藏域,把唯一的標識號 放置到session中一份,代碼如下:

?
1
<input type="hidden" name="html.uuid" value='<%=UuidToken.getUuidToken().getUUIDAsStr(request)%>'>

提交給servlet后,獲取 jsp頁隱藏域的值,用隱藏域的值和session中放置的值做比對,如果相同,保存數據并從session中刪除UUID,不相同則說明是重復提交,不進行處理。

?
1
2
3
4
5
6
7
8
Boolean flag= UuidToken.getUuidToken().isUUIDValidate(request);
if(flag){
    // 保存信息到數據庫
    //從session刪除uuid的
    UuidToken.getUuidToken().resetUUID(request);
} else{
    System.out.println("表單重復提交");
}

總結

以上就是本文關于淺談利用Session防止表單重復提交的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

原文鏈接:http://blog.csdn.net/amork/article/details/6247168

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久久久久久久久美女 | 日韩在线激情 | 久久国产28| 亚洲电影免费观看国语版 | 成码无人av片在线观看网站 | 午夜国产在线观看 | 91网站链接 | 线观看免费完整aaa 久久不雅视频 | 综合国产一区 | 日本网站在线看 | 宅男视频在线观看免费 | 色屁屁xxxxⅹ免费视频 | 美女啪网站 | 国产做爰 | 激情小说激情电影 | 欧美日韩国产综合网 | 免费观看一区二区三区视频 | 成人一区三区 | 久久精品首页 | 欧美精品久久天天躁 | 欧美一级黄色录像片 | 久久精品视频3 | 精品国产观看 | 国产在线精品区 | 香蕉久久久精品 | 精品国产一区二区亚洲人成毛片 | 毛片三区 | 国产一区二区久久精品 | 日韩视频在线一区二区三区 | 国产精品久久久久一区二区 | 丰满年轻岳中文字幕一区二区 | 国产在线播放一区二区 | 欧美一级黄色免费看 | 91久久久久久久一区二区 | av电影网站在线观看 | 欧美黄 片免费观看 | 在线成人影视 | 九九色网站 | 欧美成人国产va精品日本一级 | 欧美成人精品一级 | 国产羞羞视频 |