thinkphp3.2 驗證碼的生成和校驗,以及遇到的一些問題


      已經自學了三個月的php了,感覺好像什么都了解了一點,又還是什么都不會。歸根結底還是不怎么總結和做記錄的原因吧   每天都會遇到問題,有時候折騰個半天一天的就解決了,時間一久又會忘記,碰到相同的問題又是懵比。

相比起學習新的知識,對於之前學過的用過的東西總結我想更為的重要一些吧。

      最近利用thinkphp做了一個簡單的后台內容管理程序,可以對數據庫進行數據的增刪改查,可以將midi文件上傳,將下載鏈接保存到數據庫中。將數據庫中表數據讀取生成xml文件 以供 app開發人員調用。

      下面是我在做后台登陸驗證碼的刷新校驗時遇到的一個比較常見的問題。

      1、驗證碼的生成

      2、前台點擊即使刷新

      3、登錄提交時 ajax+jquery會進行二次驗證,此時會一直提示驗證碼錯誤的問題。

 

      貼出代碼。

 1                 //顯示驗證碼
 2         public function verify(){
 3                 $config = array(
 4                 'imageW'=>100,
 5                 'imageH'=>26,
 6                 'fontSize'=>14,
 7                 'length'=>4,
 8                 'useNoise'=>false,
 9                 'codeSet'=>'0123456789',
10             );
11             $Verify = new \Think\Verify($config);
12             $Verify->entry();
13         }   
          <th>驗證碼:</th>
                    <td>
                        <input type="code" class="len250" name="code"/>
                        <img src="{:U('verify')}" alt="驗證碼" id="code" onclick="this.src = this.src + '?'"/> 
                    </td>
1         //校驗驗證碼  寫在Common/Common/function.php 里邊,在控制器校驗驗證碼時調用
2     function check_verify($code,$id = ""){
3         $verify = new \Think\Verify();
4         return $verify->check($code,$id);
5     }
1         //異步校驗驗證碼 
2     public function checkcode(){
3         $code = I('post.code');
4         if(check_verify($code)===false){
5             echo 0;
6         }else{
7             echo 1;
8         }
9     }
 1         //jquery 驗證驗證碼
 2     $("input[name='code']").blur(function(){
 3         var code = $("input[name='code']");
 4         if(code.val().trim()==''){
 5             code.parent().find("span").remove().end().append("<span class='error'>驗證碼不能為空</span>");
 6             return ;
 7         }
 8         $.post(CONTROL+"/checkcode",{code:code.val().trim()},function(stat){
 9             if(stat==1){
10                 validate.code=0;
11                 code.parent().find("span").remove();
12                 return;
13             }else{
14                 code.parent().find("span").remove().end().append("<span class='error'>驗證碼錯誤</span>");
15                 return;
16             }
17 
18         })
19     })            
1      <script type="text/javascript" src="__PUBLIC__/js/jquery-1.7.2.min.js"></script>
2         <script type="text/javascript" src="__PUBLIC__/js/login.js"></script>
3         <script>
4             var  CONTROL = "__APP__/home/Login";
5         </script>

 

    在寫完以上代碼的時候,驗證碼就可以顯示並且即使驗證了。

    但是這個時候會出現前文提到的第三個問題,在點擊提交submit的時候,會進行二次驗證,此時會提示驗證碼錯誤。

    其實原因還是出在Thinkphp的Verify.class.php上:

 1 // 中文驗證碼字符串
 2         'useImgBg'  =>  false,           // 使用背景圖片 
 3         'fontSize'  =>  25,              // 驗證碼字體大小(px)
 4         'useCurve'  =>  true,            // 是否畫混淆曲線
 5         'useNoise'  =>  true,            // 是否添加雜點    
 6         'imageH'    =>  0,               // 驗證碼圖片高度
 7         'imageW'    =>  0,               // 驗證碼圖片寬度
 8         'length'    =>  5,               // 驗證碼位數
 9         'fontttf'   =>  '',              // 驗證碼字體,不設置隨機獲取
10         'bg'        =>  array(243, 251, 254),  // 背景顏色
11         'reset'     =>  false,           // 驗證成功后是否重置
12         );

      最后一個reset 默認是true,只需要改為false 就不會出現這個問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM