久久无码中文字幕_日韩精品无码一本二本三_久久精品呦女暗网_欧美一级夜夜爽_久久精品国产99久久99久久久

05
2017/05

表單重復(fù)提交,數(shù)據(jù)庫(kù)數(shù)據(jù)混亂怎么辦? 有效防止表單重復(fù)提交的幾種解決方法

發(fā)布時(shí)間:2017-05-05 16:27:00
發(fā)布者:pengyifeng
瀏覽量:
0


js防止表單重復(fù)提交的兩種方法

第一種:用flag標(biāo)識(shí),下面的代碼設(shè)置checkSubmitFlg標(biāo)志:

     
    
     
    
     
     
     //這句不能少,用隱含變量傳遞一個(gè)時(shí)間初值


HTML/PHP防止表單重復(fù)提交的兩種方法

1、使用Post/Redirect/Get模式。

在提交后執(zhí)行頁(yè)面重定向,這就是所謂的Post-Redirect-Get (PRG)模式。簡(jiǎn)言之,當(dāng)用戶提交了表單后,你去執(zhí)行一個(gè)客戶端的重定向,轉(zhuǎn)到提交成功信息頁(yè)面。這能避免用戶按F5導(dǎo)致的重復(fù)提交,而其也不會(huì)出現(xiàn)瀏覽器表單重復(fù)提交的警告,也能消除按瀏覽器前進(jìn)和后退按導(dǎo)致的同樣問(wèn)題。

 2、在session中存放一個(gè)特殊標(biāo)志。

在服務(wù)器端,生成一個(gè)唯一的標(biāo)識(shí)符,將它存入session,同時(shí)將它寫(xiě)入表單的隱藏字段中,然后將表單頁(yè)面發(fā)給瀏覽器,用戶錄入信息后點(diǎn)擊提交,在服務(wù)器端,獲取表單中隱藏字段的值,與session中的唯一標(biāo)識(shí)符比較,相等說(shuō)明是首次提交,就處理本次請(qǐng)求,然后將session中的唯一標(biāo)識(shí)符移除;不相等說(shuō)明是重復(fù)提交,就不再處理。

這使你的web應(yīng)用有了更高級(jí)的XSRF保護(hù)。

請(qǐng)見(jiàn)如下代碼:

      
    在頁(yè)面表單上將隨機(jī)數(shù)作為隱藏值進(jìn)行傳遞,代碼如下:  
    ">  
       
        在接收頁(yè)面的PHP代碼如下:  
       
    

3.使用header函數(shù)轉(zhuǎn)向

除了上面的方法之外,還有一個(gè)更簡(jiǎn)單的方法,那就是當(dāng)用戶提交表單,服務(wù)器端處理后立即轉(zhuǎn)向其他的頁(yè)面,代碼如下所示。

if (isset($_POST['action']) && $_POST['action'] == 'submitted') {

//處理數(shù)據(jù),如插入數(shù)據(jù)后,立即轉(zhuǎn)向到其他頁(yè)面

header('location:submits_success.PHP');

}

這樣,即使用戶使用刷新鍵,也不會(huì)導(dǎo)致表單的重復(fù)提交,因?yàn)橐呀?jīng)轉(zhuǎn)向新的頁(yè)面,而這個(gè)頁(yè)面腳本已經(jīng)不理會(huì)任何提交的數(shù)據(jù)了。

4.表單過(guò)期的處理

在開(kāi)發(fā)過(guò)程中,經(jīng)常會(huì)出現(xiàn)表單出錯(cuò)而返回頁(yè)面的時(shí)候填寫(xiě)的信息全部丟失的情況,為了支持頁(yè)面回跳,可以通過(guò)以下兩種方法實(shí)現(xiàn)。

1.使用header頭設(shè)置緩存控制頭Cache-control。

header('Cache-control: private, must-revalidate'); //支持頁(yè)面回跳

2.使用session_cache_limiter方法。

session_cache_limiter('private, must-revalidate'); //要寫(xiě)在session_start方法之前

下面的代碼片斷可以防止用戶填寫(xiě)表單的時(shí)候,單擊“提交”按鈕返回時(shí),剛剛在表單上填寫(xiě)的內(nèi)容不會(huì)被清除:

session_cache_limiter('nocache');

session_cache_limiter('private');

session_cache_limiter('public');

session_start();

//以下是表單內(nèi)容,這樣在用戶返回該表單時(shí),已經(jīng)填寫(xiě)的內(nèi)容不會(huì)被清空

將該段代碼貼到所要應(yīng)用的腳本頂部即可。

Cache-Control指定請(qǐng)求和響應(yīng)遵循的緩存機(jī)制。在請(qǐng)求消息或響應(yīng)消息中設(shè)置Cache-Control并不會(huì)修改另一個(gè)消息處理過(guò)程中的緩存處理過(guò)程。

請(qǐng)求時(shí)的緩存指令包括no-cache、no-store、max-age、max-stale、min-fresh和only-if-cached,響應(yīng)消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate和max-age。

5.使用Cookie處理

使用Cookie記錄表單提交的狀態(tài),根據(jù)其狀態(tài)可以檢查是否已經(jīng)提交表單,請(qǐng)見(jiàn)下面的代碼:

    

如果客戶端禁止了Cookie,該方法將不起任何作用,這點(diǎn)請(qǐng)注意

關(guān)鍵詞:
返回列表