首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

Zend Framework 實作驗證碼生成與驗證功能完整教學(含原始碼下載)

     編輯:PHP 相關知識

Zend Framework 實作驗證碼生成與驗證功能完整教學

在開發留言板或表單系統時,驗證碼是防止垃圾留言與機器人攻擊的關鍵機制。本文將詳細示範如何在 Zend Framework 專案中整合驗證碼功能,包含驗證碼圖片生成、Session 儲存與前後端驗證邏輯,並提供完整的 Demo 原始碼供下載參考。

核心架構設計

我們採用外掛模式將驗證碼類別封裝,便於在控制器中重複使用。主要流程分為三個步驟:建立驗證碼外掛類別、在控制器新增生成驗證碼的 Action、於視圖模板嵌入驗證碼圖片與輸入框,最後在表單提交處理中驗證 Session 中的驗證碼值。

步驟一:建立驗證碼外掛類別

在 library/Custom/Controller/Plugin/ 目錄下建立 ImgCode.php,此類別繼承自 Zend_Controller_Plugin_Abstract,負責生成隨機驗證碼字串、繪製干擾線與文字,並將驗證碼值存入 Zend_Session_Namespace('Auth_Code') 中供後續驗證使用。

<?php
class Custom_Controller_Plugin_ImgCode extends Zend_Controller_Plugin_Abstract {
    public function image2() {
        // 生成隨機驗證碼字串
        $randval = $this->rand_string(4, 'mixed');
        // 存入 Session
        $authCode = new Zend_Session_Namespace('Auth_Code');
        $authCode->imagecode = $randval;
        // 輸出圖片標頭並繪製驗證碼圖片
        header('Content-Type: image/png');
        // ... 繪圖邏輯省略 ...
    }
    // 輔助方法:生成隨機字串
    private function rand_string($len, $mode) { /* ... */ }
}
?>

步驟二:控制器新增驗證碼生成 Action

在 IndexController.php 中加入 imgcodeAction(),關閉 ViewRenderer 並實例化外掛類別輸出驗證碼圖片:

<?php
public function imgcodeAction() {
    $this->getFrontController()->setParam('noViewRenderer', true);
    Zend_Loader::loadClass('Custom_Controller_Plugin_ImgCode');
    $imagecode = new Custom_Controller_Plugin_ImgCode();
    $imagecode->image2();
}
?>

步驟三:視圖模板嵌入驗證碼

於 message/index.phtml 表單中加入驗證碼圖片與輸入框,並附上「看不清?換一張」的 JavaScript 切換功能:

<img src="/index/imgcode" id="captchaImg" alt="驗證碼" style="vertical-align:middle;" />
<a href="javascript:void(0);" onclick="document.getElementById('captchaImg').src='/index/imgcode?'+Math.random();">看不清?換一張</a>
<input type="text" name="verifyCode" id="verifyCode" />

步驟四:表單提交驗證邏輯

在 messageAction() 中比對用戶輸入與 Session 中儲存的驗證碼:

<?php
$authCode = new Zend_Session_Namespace('Auth_Code');
if (strtolower($this->_request->getPost('verifyCode')) != strtolower($authCode->imagecode)) {
    $this->view->message = '驗證碼錯誤,請重新輸入!';
    return;
}
// 驗證通過,執行留言儲存邏輯
?>

完整原始碼下載

本教學完整專案結構與程式碼已打包,可至 本站下載區 取得 Demo 原始碼,直接部署至伺服器即可運行測試。

延伸閱讀

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved