Thinkphp3.2 表单令牌

来源:互联网 发布:july七月算法 编辑:程序博客网 时间:2024/05/19 21:44

项目中一直想添加表单令牌验证,今天又时间研究了一下

首先是表单令牌的神奇之处:

之前只知道表单令牌是防止表单重复提交的,写的测试也测试不出来效果,今天先使用了一下表单令牌,发现表单提交以后保存到数据库,然后点击浏览器的后退,回到之前的表单页面,这时候不刷新页面然后修改一下数据点击提交发现时保存不到数据库的。

然后是把表单令牌的配置删除,使用普通的表单提交,这时候结果是提交以后数据保存到数据库,点击后退在提交还是会保存到数据库。即使数据一样。

因为写的例子比较简单,只测试除了这个问题。


接下来是thinkPHP3.2使用表单令牌:

首先在项目的Common的config文件夹下新建文件tags.php,在该文件中添加配置:

<?php
return array(
'view_filter'=>array('Behavior\TokenBuildBehavior'),
);
?>

然后在Common下的config.conf添加如下配置:

'TOKEN_ON'      =>    true,  // 是否开启令牌验证 默认关闭
'TOKEN_NAME'    =>    '__hash__',    // 令牌验证的表单隐藏字段名称,默认为__hash__
'TOKEN_TYPE'    =>    'md5',  //令牌哈希验证规则 默认为MD5
'TOKEN_RESET'   =>    true,  //令牌验证出错后是否重置令牌 默认为true

到这里再刷新页面就会发现form表单的结束符前的多了一个隐藏的元素name="__hash__"和value="" 这两个属性值,说明表单令牌配置成功。

最后在提交方法中,如果没有使用create方法创建数据的话,则需要手动进行表单令牌验证:

$user = M("User");
    // 手动进行令牌验证
    if (!$user->autoCheckToken($_POST)){
    // 令牌验证错误
   
    }else{
    $data['u_account'] = I('post.userName');
    $user->add($data);
    }


以上,今天的收获

0 0
原创粉丝点击