发新话题
打印

thinkphp中令牌的使用方法详解

thinkphp中令牌的使用方法详解

1.首先要开启令牌功能
config.php内添加如下:

'TOKEN_ON'=>true,  //使用令牌

'TOKEN_NAME'=>'think_html_token',    // 表单令牌名称,TP会在模板form内自动生成一个隐藏域,域名就是这个字符串

'TOKEN_TYPE'=>'md5',  //令牌加密方式,换用其他加密也可以


2.生成令牌

  • protected function saveToken(){
  •         $tokenType = C('TOKEN_TYPE');//获取了config里的'TOKEN_TYPE'配置
  •         $token = $tokenType(microtime(TRUE));//这里用md5方法加密了时间,
  •         Session::set(C('TOKEN_NAME'),$token);
  •     }
  •     // 验证令牌
  •     protected function isValidToken($reset=false){
  •         $tokenName   =  C('TOKEN_NAME');
  •         if($_REQUEST[$tokenName]==Session::get($tokenName)){
  •             $valid=true;
  •             $this->saveToken();
  •         }else {
  •             $valid=false;
  •             if($reset)    $this->saveToken();
  •         }
  •         return $valid;
  •     }
3.案例演示
View里有Form,并且config里开启了令牌的话,在生成缓存文件的时候,会自动加一个隐藏域,代码如下:
  • <?php if(C("TOKEN_ON")):?>
  • <input type="hidden" name="<?php echo C("TOKEN_NAME");?>" value="<?php echo Session::get(C("TOKEN_NAME")); ?>"/>
  • <?php endif;?>
这时候在XxxAction.clas.php文件内,在display含有表单的页面之前,调用一下saveToken()方法,并且在接受页面调用isValidToken()方法,就OK了,下面是我的IndexAction.class.php测试代码。
  • <?php
  • class IndexAction extends Action{
  •      public function index(){
  •          $this->saveToken();
  •          $this->display();
  •     }
  •     public function checktoken(){
  •        if($this->isValidToken()){
  •           echo '提交成功!';
  •      }
  •      else{
  •           echo '不能重复提交啦!';
  •        }
  •     }
  • }
  • ?>

TOP

发新话题