最常用的方法就是利用token。即:
成都創(chuàng)新互聯(lián)是一家專業(yè)提供長寧企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、網(wǎng)站設(shè)計、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為長寧眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
1、在生成頁面的時候生成一個token(隨機(jī)字符串),并把它同時寫入表單的某個hidden中,和服務(wù)端的session中。
2、客戶端提交表單到服務(wù)器時,比對表單中的token與session中的token是否一致。若不一致則認(rèn)為是無效的請求。
3、不管第2步的校驗是否通過,token只要使用一次后就立即作廢(即:從session中銷毀)。同時token也可以關(guān)聯(lián)時間信息,超時后也自動作廢。
這樣,即便客戶端重復(fù)提交,也只有第一次的請求能夠成功。
在php中如何防止表單的重復(fù)提交
?php
/*
*?php中如何防止表單的重復(fù)提交
*/
session_start();
if?(empty($_SESSION['ip']))?{//第一次寫入操作,判斷是否記錄了IP地址,以此知道是否要寫入數(shù)據(jù)庫
$_SESSION['ip']?=?$_SERVER['REMOTE_ADDR'];?//第一次寫入,為后面刷新或后退的判斷做個鋪墊
//...........//寫入數(shù)據(jù)庫操作
}?else?{//已經(jīng)有第一次寫入后的操作,也就不再寫入數(shù)據(jù)庫
echo?'請不要再次刷新和后退';?//寫一些已經(jīng)寫入的提示或其它東西
}
?
還有辦法就是:
1、在頁面生成隨機(jī)碼,也就是每次提交隨機(jī)碼都不一樣,在提交的時候驗證隨機(jī)碼!
2、在提交的時候,驗證如果數(shù)據(jù)存在,就不提交了
可以采用ajax配合使用php可以防止刷新頁面重復(fù)提交
也可以使用框架同樣可以防止
你直接訪問數(shù)據(jù)處理頁面的時候,$_POST['title'],$_POST['num] 應(yīng)該是空值,所以你增加一個判斷,必須有具體的值,再進(jìn)行sql操作。