多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php框架 > ThinkPHP > ThinkPHP3.1快速入門(20)驗證碼

ThinkPHP3.1快速入門(20)驗證碼

來源:程序員人生   發布時間:2014-04-12 13:44:26 閱讀次數:4238次
在這個網絡安全漫天飛的年代,驗證碼功能起碼能算是一個值得信賴的好衛兵了。本篇我們就來講下如何在ThinkPHP中使用驗證碼功能。

獲取擴展類庫

ThinkPHP的擴展中由圖像處理類Image以及用于生成隨機驗證碼的字符處理類String共同完成驗證碼功能,可以在在http://www.thinkphp.cn/extend/225.html下載圖像處理類以及http://www.thinkphp.cn/extend/266.html下載字符處理類,或者下載官方的完整擴展包(http://www.thinkphp.cn/down/253.html)里面也已經包含以上擴展類了。如果是單獨下載的擴展類庫,把解壓后的Image.class.php和String.class.php 一起放入ThinkPHP/Extend/Library/ORG/Util/(如果沒有請手動創建)目錄下面。由于驗證碼顯示采用了GD庫支持,所以需要環境支持GD庫。

生成驗證碼

生成驗證碼其實很簡單,只需要在你的Action中添加操作方法,一般為了避免受權限控制的影響,我們通常把這個方法放到公共Action或者無需授權就能訪問的控制器(例如PublicAction)中,下面我們以放到PublicAction控制器類中為例,代碼如下:
class PublicAction extends Action{
    Public function verify(){
        import('ORG.Util.Image');
        Image::buildImageVerify();
    }
}
定義后,我們可以在任何需要驗證碼的模塊中調用Public模塊的verify方法來顯示驗證碼,需要做的僅僅是在需要的模板中添加如下調用代碼:
<img src='!-APP-!/Public/verify/' />
這樣,我們訪問該頁面后就能看到默認的驗證碼圖像顯示,如下所示:

如果你的驗證碼不能正常顯示,請檢查:
  1. 是否已經安裝GD庫支持并正常開啟;
  2. Image類庫以及String類庫是否在正確的位置以及是否正確導入;
  3. 驗證碼輸出之前是否有任何的其他輸出(尤其是UTF8的BOM頭信息輸出);
很多開發人員驗證碼無法顯示的情況多數是由于文件中有輸出或者BOM頭的情況,關于UTF8的BOM頭檢測有工具可以檢測,很多編輯器也支持去掉BOM保存(這個不清楚的話可以百度下)。這里要另外強調下很多開發人員在書寫代碼的時候不夠規范,例如經常會有下面的情形發生:
在文件的開頭有空行

在文件的尾部有空行

以上兩種情況都會導致頁面的其他輸出,從而導致驗證碼出錯。

驗證碼顯示設置

默認情況下,驗證碼采用隨機的4位數字顯示,我們可以通過參數來設置不同的顯示方式,Image類的buildImageVerify方法用法如下:
buildImageVerify 生成圖像驗證碼
用法 buildImageVerify($length,$mode,$type,$width,$height,$verifyName)
參數 length 驗證碼的長度,默認為4位數
model 驗證字符串的類型,默認為數字,其他支持類型有0 字母 1 數字 2 大寫字母 3 小寫字母 4中文 5混合
type 驗證碼的圖片類型,默認為png
width 驗證碼的寬度,默認會自動根據驗證碼長度自動計算
height 驗證碼的高度,默認為22
verifyName 驗證碼的SESSION記錄名稱,默認為verify

驗證輸入

每次生成驗證碼的時候,就會通過SESSION記錄本次的驗證碼的md5后的字符串信息,所以,要檢查驗證碼是否正確,我們只需要在Action中使用下面的代碼判斷就行了:
if(session('verify') != md5($_POST['verify'])) {
   $this->error('驗證碼錯誤!');
}
建議使用session方法來獲取SESSION值,因為驗證碼生成方法里面也是采用的session方法保存的,可以避免受session前綴的影響而出錯。這里的verify名稱取決于你的驗證碼的verifyName參數的值。
如果你的session功能不正常,可能會導致驗證碼檢測報錯的情況發生。

中文驗證碼

BuildImageVerify方法不支持中文驗證碼的顯示,如果需要顯示中文驗證碼,請使用GBVerify方法,用法示例:
Public function verify(){
    import("ORG.Util.Image");
    Image::GBVerify();
}
顯示效果如下:

如果能夠顯示圖片,但是看不到圖片中的中文字符,請檢查是否有拷貝字體文件到圖像類庫所在目錄。默認使用的字體文件是simhei.ttf(該文件可以從window的Fonts目錄下面找到)。
GBVerify方法也有不同的參數用于設置驗證碼,具體用法如下:
GBVerify生成中文驗證碼
用法 GBVerify ($length,$type,$width,$height,$fontface,$verifyName)
參數 length:驗證碼的長度,默認為4位數
type:驗證碼的圖片類型,默認為png
width:驗證碼的寬度,默認會自動根據驗證碼長度自動計算
height:驗證碼的高度,默認為50
fontface:使用的字體文件,使用完整文件名或者放到圖像類所在的目錄下面,默認使用的字體文件是simhei.ttf(該文件可以從window的Fonts目錄下面找到
verifyName:驗證碼的SESSION記錄名稱,默認為verify

驗證碼刷新

如果隨機生成的驗證碼看不清楚,就需要添加驗證碼刷新功能來重新生成,這個其實只是修改前端代碼,后臺的驗證碼生成方法無需修改。
一般我們是用js方法來控制驗證碼的刷新,例如下面可以實現點擊驗證碼圖片刷新驗證碼:
<script language="JavaScript">
function fleshVerify(){ 
    //重載驗證碼
    var time = new Date().getTime();
        document.getElementById('verifyImg').src= '!-APP-!/Public/verify/'+time;
}
</script>
<img id="verifyImg" src='!-APP-!/Public/verify/' onclick="fleshVerify()" />
當然,熟悉Jquery的開發人員,可以用Jquery代碼來簡化驗證碼刷新的js方法,這個就不再多說了。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 久久婷婷一区二区三区 | 亚洲免费在线视频播放 | 亚洲精品国产一区二区图片欧美 | 国产精品人人视频 | 福利片91 | 狠狠躁天天躁夜夜躁夜天战 | 激情片段视频 | 国产一区二区三区夜色 | 午夜dj视频在线观看免费 | 日韩精品一| 欧美色成人 | 欧美v日韩v亚洲v最新 | 国产亚洲欧美视频 | 国产在线观看不卡免费高清 | 一区二区三区四区精品 | 亚洲三级中文字幕 | 91人人爱 | 欧美一区二区三区视频 | 手机色在线 | 中文字幕第30页 | 国产精品亚洲一区二区三区久久 | japanese日本护士xx亚洲 | 日韩精品一区在线观看 | 亚洲成人三级 | 国产精品久久久久久免费播放 | 精品无人区一区二区三 | 顶级欧美色妇xxxxbbbb | 69xxxx女人免费| 亚洲男女一区二区三区出奶水了 | 亚洲高清视频在线观看 | 校园春色 亚洲色图 | 国产九九视频在线观看 | 欧美美女free| 噜噜影院无毒不卡 | 免费大片黄在线观看日本 | 欧美精品福利视频 | 中文字幕不卡一区 二区三区 | 羞羞免费观看网站 | 视频一区二区免费 | 校园激情亚洲 | 男女一区二区三区免费 |