解決form表單重複提交以及多頁面提交問題
阿新 • • 發佈:2019-02-12
開發過程,遇到post重複提交問題,導致資料寫入混亂。然後採用了一種方式:
(框架:TP)
在請求之前,加上表單隱藏域:__hash__不過體驗度很差
在後端,
//防止表單重複提交
if(!check_token($_POST)){
$this->ajaxReturn(null,"請不要重複提交",0);
}
,這樣也算解決了重複提交的問題,不過遇到同時開啟多個瀏覽器時,hash是不同的,還是可以進行重複提交,想了想,試著用memcache鎖機制寫了一段簡短程式碼,臨時解決了這樣的問題:
/** * @uses 採用memcache控制重複提交 * @author jhl */ public function _AuthenticateRealNameMemcacheControl($user_id){ $keyname = 'AuthenticateRealNamePostControl_'.$user_id; $lockkeyname = $keyname.'_lock'; $CacheMemcache=new CacheMemcache(); $lockkeyvalue = $CacheMemcache->get($lockkeyname); if($lockkeyvalue == 'lock'){ $CacheMemcache->set($lockkeyname,'unlock',1); $this->ajaxReturn(null,"請不要重複提交",0); }elseif($lockkeyvalue == 'unlock'){ $CacheMemcache->set($lockkeyname,'lock',1); }else{ $CacheMemcache->set($lockkeyname,'lock',1); } }
在進入方法引入:
//防止多個頁面同時提交
$this->_AuthenticateRealNameMemcacheControl(C('userId'));
雖然通過了測試人員的測試,不過細想下,其實還是很難滿足要求的,暫且這樣吧,睡覺