首先在项目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();
}