表单令牌可以放置重复提交,同时对机器人有一定的拦截作用,在 phpGrace 的支持下(利用 cookie),实现这样的功能是非常简单的,函数说明:1、setToken() 设置token在表单中使用隐藏域设置令牌,如:

    1. <form action="" method="post">
    2. <input type="text" name="name" />
    3. <input type="hidden" name="token" value="<?php echo setToken();?>" />
    4. <input type="submit" value="提交"/>
    5. </form>

    2、getToken 获取令牌的值在控制器内获取表单提交信息,并校验令牌,如:

    1. <?php
    2. class indexController extends grace{
    3. public function index(){
    4. if(PG_POST){
    5. $token = getToken();
    6. echo "系统记录的 token:{$token}<br />";
    7. echo "POST数据中的 token:{$_POST['__token__']}<br />";
    8. if($token == $_POST['__token__']){
    9. echo 'ok';
    10. }else{
    11. echo 'token 错误';
    12. }
    13. }
    14. }
    15. }

    说明:getToken() 获取token 后会注销 cookie 中记录的 token,只能获取一次哦 ^^3、数据验证过程中自动验证token3.1 遵循规则:表单内隐藏域的名称为:“_token

    1. <input type="hidden" name="__token__" value="<?php echo setToken();?>" />

    3.2 在进行数据验证是设置验证token,如:

    1. <?php
    2. class indexController extends grace{
    3. public function index(){
    4. if(PG_POST){
    5. $checkRules = array(
    6. 'name' => array('string', '2,10', '姓名应为 2 - 10 字符')
    7. );
    8. //第三个参数为可选参数,设置为true时自动检查 Token
    9. $checker = new phpGrace\tools\dataChecker($_POST, $checkRules, true);
    10. $res = $checker->check();
    11. if($res){
    12. echo '验证通过';
    13. }else{
    14. echo $checker->error;
    15. }
    16. }
    17. }
    18. }

    原文: http://www.phpgrace.com/doc/info/322-2.html