1. 程式人生 > >問題記錄-----表單重複提交==>利用session驗證

問題記錄-----表單重複提交==>利用session驗證

問題記錄-----表單重複提交==>利用session驗證

大概方法就是利用session生成一個token做提交驗證,話不多說上程式碼

html程式碼

<form id="frmsave" action=""  enctype="multipart/form-data" method="POST" class="form-horizontal">
	<input type="hidden" name="st" value="<?= $st ?>" />
	//....其他提交的省略
</form>

php程式碼

if
(!cc_empty($_POST)) { session_token(1,$_POST['st']); //如果有資料提交則驗證token unset($_POST['st']); //驗證通過則刪除 } else { $tpl=$this->tpl().'index'; $data=array( 'st'=>session_token(),//交出session生成的表單token ); $this->view($tpl,$data); } /*****************************************************************/
//session令牌,防止表單重複提交 function session_token($handon=0,$handon_token=''){ if(!isset($_SESSION)){ session_start(); } if($handon==0){ $_SESSION['token']=time(); return $_SESSION['token']; } else if($handon==1){ //表單提交時,如果沒有token或者不等於session就die if
(!isset($_SESSION['token']) || $_SESSION['token']==null || (strcmp($_SESSION['token'], $handon_token)!=0)){ is_ajax()?send_json(1,'nothing'):die(); } //否則置空session $_SESSION['token']=null; } else{ die('非法操作'); } }

至於前端的限制,一開始用了jq控制提交按鈕去禁用,而我的二手電腦每次點提交都會卡一下,alert測試發現問題隨緣出現,懷疑是電腦太卡導致jq的禁用處理太慢,於是改成了定義一個js變數為1,點選提交按鈕觸發+1,提交前驗證是否為2,否則return false。

這裡說一下提交表單儘量通過js去提交,可以用formdata或者其他,這樣對錶單的處理比較好處理