ThinkPHP框架之驗證碼

TP框架中Think\Verify類能夠支持驗證碼的生成和驗證功能。具體文件:ThinkPHP/Library/Think/Verify.class.phpjavascript

生成驗證碼

下面是最簡單的方式生成驗證碼:php

  1. $Verify = new \Think\Verify();
  2. $Verify->entry();

上面的代碼會生成默認的驗證碼圖片並輸出,顯示以下:css

生成的驗證碼信息會保存到session中,包含的數據有:html

  1. array('verify_code'=>'當前驗證碼的值','verify_time'=>'驗證碼生成的時間戳')

若是你須要在一個頁面中生成多個驗證碼的話,entry方法須要傳入可標識的信息。java

驗證碼參數

能夠對生成的驗證碼設置相關的參數,以達到不一樣的顯示效果。這些參數包括:jquery

參數 描述
expire 驗證碼的有效期(秒)
useImgBg 是否使用背景圖片 默認爲false
fontSize 驗證碼字體大小(像素) 默認爲25
useCurve 是否使用混淆曲線 默認爲true
useNoise 是否添加雜點 默認爲true
imageW 驗證碼寬度 設置爲0爲自動計算
imageH 驗證碼高度 設置爲0爲自動計算
length 驗證碼位數
fontttf 指定驗證碼字體 默認爲隨機獲取
useZh 是否使用中文驗證碼
bg 驗證碼背景顏色 rgb數組設置,例如 array(243, 251, 254)
seKey 驗證碼的加密密鑰
codeSet 驗證碼字符集合 3.2.1 新增
zhSet 驗證碼字符集合(中文) 3.2.1 新增

默認參數配置:數組

參數設置使用兩種方式。session

實例化傳入參數:框架

或者採用動態設置的方式,如:函數

驗證碼字體

默認狀況下,驗證碼的字體是隨機使用 ThinkPHP/Library/Think/Verify/ttfs/目錄下面的字體文件,咱們能夠指定驗證碼的字體,例如:

  1. $Verify = new \Think\Verify();
  2. // 驗證碼字體使用 ThinkPHP/Library/Think/Verify/ttfs/5.ttf
  3. $Verify->fontttf = '5.ttf';
  4. $Verify->entry();

背景圖片

支持驗證碼背景圖片功能,能夠以下設置:

  1. $Verify = new \Think\Verify();
  2. // 開啓驗證碼背景圖片功能 隨機使用 ThinkPHP/Library/Think/Verify/bgs 目錄下面的圖片
  3. $Verify->useImgBg = true;
  4. $Verify->entry();

中文驗證碼

若是要使用中文驗證碼,能夠設置:

  1. $Verify = new \Think\Verify();
  2. // 驗證碼字體使用 ThinkPHP/Library/Think/Verify/zhttfs/simhei.ttf
  3. $Verify->useZh = true;
  4. $Verify->entry();

顯示效果如圖:

若是沒法正常顯示,請確認你的 ThinkPHP/Library/Think/Verify/zhttfs/ 目錄下面存在中文字體文件。

若ThinkPHP/Library/Think/Verify/zhttfs/裏面沒有中文字體文件,能夠下載或者從C:\Windows\Fonts\裏面找到中文字體文件複製過來,注意字體文件擴展名爲.ttf。

驗證碼檢測

能夠用Think\Verify類的check方法檢測驗證碼的輸入是否正確,例如,下面是封裝的一個驗證碼檢測的函數:

  1. // 檢測輸入的驗證碼是否正確,$code爲用戶輸入的驗證碼字符串
  2. function check_verify($code, $id = ''){
  3. $verify = new \Think\Verify();
  4. return $verify->check($code, $id);
  5. }

練習:以登陸爲例:

控制器方法:

<?php
namespace Home\Controller;
use Think\Controller;

class LoginController extends Controller
{
    function Login()
    {
        if(empty($_POST))
        {
            $this->display();    
        }    
        else
        {
            $code = $_POST["yzm"];
             $verify = new \Think\Verify();
           if($verify->check($code,2)) //code是用戶輸入的值 ,2是驗證碼檢測標示,必須與生成的驗證碼標示相同才能驗證
            {
                if($_POST["uid"]!="" && $_POST["pwd"]!="")
                {
                    $model = D("Users");
                    $uid = $_POST["uid"];    
                    $pwd = $_POST["pwd"];
                    $attr = $model->field("Pwd")->find($uid);
                    //var_dump($attr);
                    if($pwd==$attr["pwd"])
                    {
                        session("uid",$uid);   // 跳轉頁面以前將$uid存入session                    $this->success("登陸成功!","Main");                        
                    }
                    else
                    {
                        $this->error("登陸失敗!");    
                    }
                }
                else
                    {
                        $this->error("用戶名或者密碼不能爲空!");    
                    }
            }
            else
            {
                $this->error("驗證碼不正確!");    
            }
        }        
    }
//生成驗證碼的操做方法
    function yzm()
    {
        $config =    array(    
            'fontSize'    =>    30,    // 驗證碼字體大小    
            'length'      =>    4,     // 驗證碼位數  
            'useCurve'    =>    true,  // 是否畫混淆曲線  
            'useNoise'    =>    true,  // 關閉驗證碼雜點
            'expire'      =>    60,    // 驗證碼有效期(秒)
            'useImgBg'    =>    false,  // 使用背景圖片
            'useZh'       =>    true,  // 使用中文驗證碼
            'imageW'      =>    240,   // 驗證碼寬度
            'imageH'      =>    60,    // 驗證碼高度
            'fontttf'     =>    'simhei.ttf', // 驗證碼字體
        );
        $Verify = new \Think\Verify($config);
        $Verify->entry(2);//參數是生成驗證碼的標示,適用於同一個頁面有多個驗證碼的時候,生成驗證碼的標示必須與檢測驗證碼的標示相同,不然驗證碼不正確
    }

模板頁面:

<load href="__PUBLIC__/Js/jquery-1.11.2.min.js" />
<style type="text/css">
#sx{ color:#33F; text-decoration:underline; cursor:pointer;}
</style>
</head>

<body>
<h1>登陸頁面</h1>
<form action="__ACTION__" method="post">
<div>用戶名:<input type="text" name="uid" /></div><br />
<div>密碼:&nbsp;<input type="password" name="pwd" /></div><br />
<div>驗證碼:<input type="text" name="yzm" /></div><br />
<!--src指向方法 -->
<div><img src="__CONTROLLER__/yzm" id="yzm" alt="驗證碼" /><span id="sx">看不清楚,換一張</span></div> 
<input type="submit" value="登陸" /> 
</form>

</body>
</html>
<script type="text/javascript">
$(document).ready(function(e) {    
      $("#sx").click(function(){        
        $("#yzm").attr("src","__CONTROLLER__/yzm");//更新src屬性        
        })   
});

</script>

請求Login方法:

相關文章
相關標籤/搜索