在測試程式功能的時候,發現表單POST資料的時候存在一個重複提交的問題,而在每個提交頁面都使用驗證碼進行驗證使用者體驗又不太好,查閱網上的資料後發現目前解決這個問題的方法主要有以下幾種:
1、添加js驗證,防止提交重複表格單
2、提交後頁面重新導向或重新整理
3、提交後,提交按鈕變為不可用
4、加驗證碼
5、表單令牌(session)
前三種方法可以控制普通使用者正常提交,卻無法阻止惡意灌水性質的提交,驗證碼控制有時候影響使用者體驗,在這種情況下只有使用表單令牌了
1、 時間限制(驗證碼)+重新導向
前台(不做時間限制的話需要):<input type=’hidden’value=”$_SESSION[‘joininToken’]” name=’token’>
如果是對提交做時間限制,前台可以不寫代碼
<?php
$time=60; //1分鐘
If(isset($_SESSION[‘joininToken’] )){
$tokenTime = sub_str($_SESSION[‘joininToken’],0,11);
(time()-$tokenTime) < $time && $this->showMsg(‘提交過於頻繁’);
}
$encode = time().MD5(random(1000,99999).’DvHgR8O4’);
$_SESSION[‘joininToken’]= $encode;
提交完成後立即重新導向
//如果有自己的加密函數可以加密和解密可以替換為以下代碼:
$encode = xxUtils::authcode(time().xxx,‘encode’,$salt,$time)
//解密
$tokenTime = str_replace(' ','+',$this->getParam('token'));
$tokenTime = xxUtils::authcode(time().xxx,‘decode’,$salt,$time);