表单令牌可以放置重复提交,同时对机器人有一定的拦截作用,在 phpGrace 的支持下(利用 cookie),实现这样的功能是非常简单的,函数说明:
1、setToken() 设置token
在表单中使用隐藏域设置令牌,如:
<form action="" method="post"> <input type="text" name="name" /> <input type="hidden" name="token" value="<?php echo setToken();?>" /> <input type="submit" value="提交"/> </form>
2、getToken 获取令牌的值
在控制器内获取表单提交信息,并校验令牌,如:
<?php class indexController extends grace{ public function index(){ if(PG_POST){ $token = getToken(); echo "系统记录的 token:{$token}<br />"; echo "POST数据中的 token:{$_POST['__token__']}<br />"; if($token == $_POST['__token__']){ echo 'ok'; }else{ echo 'token 错误'; } } } }
说明:
getToken() 获取token 后会注销 cookie 中记录的 token,只能获取一次哦 ^_^
3、数据验证过程中自动验证token
3.1 遵循规则:表单内隐藏域的名称为:“__token__”
<input type="hidden" name="__token__" value="<?php echo setToken();?>" />
3.2 在进行数据验证是设置验证token,如:
<?php class indexController extends grace{ public function index(){ if(PG_POST){ $checkRules = array( 'name' => array('string', '2,10', '姓名应为 2 - 10 字符') ); //第三个参数为可选参数,设置为true时自动检查 Token $checker = new phpGrace\tools\dataChecker($_POST, $checkRules, true); $res = $checker->check(); if($res){ echo '验证通过'; }else{ echo $checker->error; } } } }