THINKPHP 防止重複提交表單 自己實現token
阿新 • • 發佈:2019-02-17
首先在專案function.php 定義幾個方法。
//建立TOKEN function creatToken() { $code = chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)) . chr(mt_rand(0xB0, 0xF7)) . chr(mt_rand(0xA1, 0xFE)); session('TOKEN', authcode($code)); } //判斷TOKEN function checkToken($token) { if ($token == session('TOKEN')) { session('TOKEN', NULL); return TRUE; } else { return FALSE; } } /* 加密TOKEN */ function authcode($str) { $key = "ANDIAMON"; $str = substr(md5($str), 8, 10); return md5($key . $str); }
在需要防止重複提交的表單form中加入相關程式碼
<form action="{:U()}" method="post" class="form-horizontal">
<input type="hidden" name="TOKEN" value="{:session('TOKEN')}">
...
</form>
1.在頁面展示前呼叫creatToken()方法生成token。
2.在相應控制器POST請求中 使用 checkToken() 進行判斷是否重複提交。
if(IS_POST){ //防止重複提交 如果重複提交跳轉至相關頁面 if (!checkToken($_POST['TOKEN'])) { $this->redirect('index/index'); return; } //下面相關業務程式碼 }else{ //建立token creatToken(); $this->display(); }