防止form表單多次提交
點選提交按鈕兩次。
點選重新整理按鈕。
使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。
使用瀏覽器歷史記錄重複提交表單。
瀏覽器重複的HTTP請求。
使用者提交表單時可能因為網速的原因,或者網頁被惡意重新整理,致使同一條記錄重複插入到資料庫中,這是一個比較棘手的問題。我們可以從客戶端和伺服器端一起著手,設法避免同一表單的重複提交。
1、js禁掉提交按鈕。
表單提交後使用Javascript使提交按鈕disable。這種方法防止心急的使用者多次點選按鈕。但有個問題,如果客戶端把Javascript給禁止掉,這種方法就無效了
2、使用Post/Redirect/Get模式。
在提交後執行頁面重定向,這就是所謂的
這能避免使用者按F5導致的重複提交,而其也不會出現瀏覽器表單重複提交的警告,也能消除按瀏覽器前進和後退按導致的同樣問題。
3、在session中存放一個特殊標誌。
在伺服器端,生成一個唯一的識別符號,將它存入session,同時將它寫入表單的隱藏欄位中,然後將表單頁面發給瀏覽器,使用者錄入資訊後點擊提交,在伺服器端,獲取表單中隱藏欄位的值,與session中的唯一識別符號比較,相等說明是首次提交,就處理本次請求,然後將session中的唯一識別符號移除;不相等說明是重複提交,就不再處理。
這使你的web應用有了更高階的XSRF保護。
請見如下程式碼:
- <?php
- session_start();
- //根據當前SESSION生成隨機數
- $code = mt_rand(0,1000000);
- $_SESSION['code'] = $code;
- ?>
- 在頁面表單上將隨機數作為隱藏值進行傳遞,程式碼如下:
- <inputtype="hidden"name="originator"value="<?=$code?>">
- 在接收頁面的PHP程式碼如下:
- <?php
- session_start();
- if(isset($_POST['originator'])) {
- if($_POST['originator'] == $_SESSION['code']){
- // 處理該表單的語句,省略
- }else{
- echo ‘請不要重新整理本頁面或重複提交表單!’;
- }
- }
- ?>
4.使用header函式轉向
除了上面的方法之外,還有一個更簡單的方法,那就是當用戶提交表單,伺服器端處理後立即轉向其他的頁面,程式碼如下所示。
if (isset($_POST['action']) && $_POST['action'] == 'submitted') {
//處理資料,如插入資料後,立即轉向到其他頁面
header('location:submits_success.php');
}
這樣,即使使用者使用重新整理鍵,也不會導致表單的重複提交,因為已經轉向新的頁面,而這個頁面指令碼已經不理會任何提交的資料了。
5.表單過期的處理
在開發過程中,經常會出現表單出錯而返回頁面的時候填寫的資訊全部丟失的情況,為了支援頁面回跳,可以通過以下兩種方法實現。
1.使用header頭設定快取控制頭Cache-control。
header('Cache-control: private, must-revalidate'); //支援頁面回跳
2.使用session_cache_limiter方法。
session_cache_limiter('private, must-revalidate'); //要寫在session_start方法之前
下面的程式碼片斷可以防止使用者填寫表單的時候,單擊“提交”按鈕返回時,剛剛在表單上填寫的內容不會被清除:
session_cache_limiter('nocache');
session_cache_limiter('private');
session_cache_limiter('public');
session_start();
//以下是表單內容,這樣在使用者返回該表單時,已經填寫的內容不會被清空
6、在資料庫裡新增約束。
在資料庫裡新增唯一約束或建立唯一索引,防止出現重複資料。這是最有效的防止重複提交資料的方法。
相關推薦
防止form表單多次提交
點選提交按鈕兩次。點選重新整理按鈕。使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。使用瀏覽器歷史記錄重複提交表單。瀏覽器重複的HTTP請求。使用者提交表單時可能因為網速的原因,或者網頁被惡意重新整理,致使同一條記錄重複插入到資料庫中,這是一個比較棘手的問題。我們可以從客
防止表單多次提交的方法
作者:莎士比亞的人生 來源:CSDN 原文:https://blog.csdn.net/qq_34368762/article/details/79130198 表單重複提交是在多使用者Web應用中最常見、帶來很多麻煩的一個問題。有很多的應用場景都會遇到重複提交問題,比如:
【原創】php將form表單多次請求的內容儲存到txt並顯示到form所在的頁面
小菜鳥分享小小經驗: 做之前百度理解相關函式(這個很重要),然後整合了一下自己的版本。 我做的是一個 同學聚會報名 頁面。 原始碼: <?php if(
js 防止表單多次重複提交
using (Html.BeginForm("action", "controller", new { }, FormMethod.Post, new { name = "submitForm" ,onsubmit="return checkSubmit();" }))
form表單多選框提交數據 服務器只能接受到一個數據
表單提交 form 多選 提交過去後表單中name相同的值會被後一個覆蓋,而不會被單獨識別出來。在name名稱後面加上‘[]’即可;如 name=‘user[]‘ 註意下面兩個教程的區別,我很想知道w3c怎麽讀取到的。等待指教; http://www.w3school.com.cn/tags/at
防止form表單重複提交的八種方法
表單重複提交是在多使用者Web應用中最常見、帶來很多麻煩的一個問題。有很多的應用場景都會遇到重複提交問題,比如: (1)點選提交按鈕兩次。 (2)點選重新整理按鈕。 (3)使用瀏覽器後退按鈕重複之前的操作,導致重複提交表單。 (4)使用瀏覽器歷史記錄重複提交表單。 (5)瀏
一個按鈕提交兩個form表單,分別提交到兩個action裡,第一個form的資料丟失
--背景 在一個iframe開啟的窗口裡,有兩個需要提交的form,而且需要提交到不同的兩個action裡,正常操作下丟失第一個form的資料 --解決方法 在這兩個form下新增一個新的iframe標籤<iframe id = "這個id要與這個視窗的iframe的id不同"&g
form表單Get方式提交時,action中帶引數傳遞不了
form表單get方式提交時,action中帶引數傳遞不了 樣例: <form action="getPostServlet/getPost.do?param4=param4" method="get"> <input type="hidden" name="p
使用FormData對包含檔案型別的form表單進行非同步提交(檔案上傳)並配置回撥
直接使用form表單的submit提交按鈕進行表單提交到action,這個是非非同步的,不但在action返回時需要重新整理頁面或跳轉至另外一個頁面,也不能配置回撥函式對返回資料進行某些處理。 其次,如果使用表單的serialize()方法進行ajax提交,則只能傳遞簡單
springMVC實現form表單資料+檔案提交
說明: 1、SpringMVC實現檔案上傳,需要再新增兩個jar包。一個是檔案上傳的jar包,一個是其所依賴的IO包。這兩個jar包 commons-fileupload-1.2.2.jar commons-io-2.4.jar Controller @Respon
使用jQuery重用form表單並非同步提交到其他action
在做頁面開發的時候,有時候要重用表單的資料,並非同步請求提交到其他的連結中,這個時候就可以使用jquery去修改表單的action值(記得使用後修改回來),並呼叫submit方法,當然後臺的連結action或者controller方法必須返回值型別為void,否則將發生頁面
form表單點選提交按鈕後 不重新整理頁面
<form id="user"> <button id="search" onclick="save()" >儲存</button> </form> function save(){ $.post("寫入
angularjs $http事務實現form表單序列化提交
在angularJs中前後端資料互動時 在新增時需要對form表單進行處理,並通過$http提交 需要注意 : 1. $http()引數列表為Json陣列 2. 需要對form
跨域form表單submit按鈕提交頁面不跳轉
<html> <body> <form action="" method="post" target="nm_iframe"> <input type="text" id="id_in
點選form表單中的提交按鈕出現頁面重新整理效果的原因
最近做一個web開發,在做表單提交的時候,出現了類似於F5重新整理頁面效果的問題。(因為前臺開發沒有分離,所以一個js檔案最少也有五六千行,出了bug很難找到問題,所以真心建議前臺開發要分離開來)問題:點選提交按鈕,出現了F5重新整理頁面的效果問題原因:將提交按鈕button
form表單—2種提交方式
只提交引數到後臺,不接收返回值 html程式碼 <!--第1步:設定 action,method--> <form id="editForm" action="app/edit
獲取form表單由submit提交的內容
html中的form表單部分的程式碼 <form action="dbController.php" id="loginform" method="post"> <p&g
form表單的ajax提交【組裝json】
關鍵程式碼: /** * 將表單序列化 然後轉換成json資料 */ var data = $("#editForm").serializeObject(); JSON.stringify(data); //java後臺解析 DesignPlan bean = (Desi
多個按鈕提交一個form表單
class 按鈕 控制 () ctx submit repo rep 事件 多個按鈕提交一個form表單,然後執行控制層不同的方法 在button的onclick事件下可以重寫form的action屬性 <button class="common_button" on
ASP.NET webform多次提交表單問題
的人 事件 client form gin ron 遇到 提交按鈕 orm 最近幾天遇到一個頭疼的問題,項目采用的是webform開發,每個界面都有個提交按鈕,點擊多次提交按鈕導致提交按鈕的OnClick事件執行了多次, 每次OnClick裏面都有一些邏輯處理,執行了