Cakephp中使用Captcha实现更加安全的验证码

Captcha官方

http://www.captcha.ru/en/

Captcha下载

http://www.captcha.ru/en/kcaptcha/

本地下载1.2.6版本

使用Captcha可以实现安全的验证码功能,Captcha提供了多种风格和样式的风格比如

image

使用方法超级简单

getImage.php

<?php
session_start();
include('kcaptcha.php');
$captcha = new KCAPTCHA();
?>

index.php





Captcha会自动在Session中设置一个值来保存已经生成的验证码,要判断验证码是否正确,可以这样做:

//Captche会自动在Session中存储一个名为captcha_keystring的字符串
//只要验证一下提交的验证码是否和它相等就OK了

if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
    echo "Correct";
}else{
    echo "Wrong";
}

那么,如何在Cakephp中使用Captcha呢?

介绍一下, Yoophi 在Cakephp通过组件方式使用Captcha的方法

将kcaptcha文件夹拷贝到vendors目录

image

在components中写一个新的组件

image

代码如下:

<?php
class CaptchaComponent extends Object {
	var $Controller = null;

	function startup(&$controller)
	{
		$this->Controller = $controller;
	}

	function render()
	{
		App::import('vendor', 'kcaptcha/kcaptcha');
		$kcaptcha = new KCAPTCHA();
		$this->Controller->Session->write('captcha', $kcaptcha->getKeyString());
		exit;
	}

}
?>

然后,写一个生成验证码的方法,比如

class UsersController extends AppController {

    var $name        = 'Users';
    var $components  = array('Captcha');

    function captcha() {
        Configure::write('debug', '0');
        $this->autoRender = false;
        $this->Captcha->render();
    }

}

视图中的调用

echo $html->image(array('controller' => 'Users','action'=>'captcha'));

验证提交的验证码是否正确

function _checkCaptcha($model) {
    if ($this->Session->check('captcha')) {
        $s_captcha = $this->Session->read('captcha');

        if (!empty($this->data[$model]['captcha']) && $this->data[$model]['captcha'] == $s_captcha) {
            return true;
        }
    }

    return false;
}

总结

Captcha是一个免费的验证码文件,使用方法超级简单,但是安全性很高,配置方法简单,可以应用于多种开发程序框架

Captcha的配置文件为kcaptcha_config.php

通过它可以变更生成的图片大小,样式等内容,有兴趣的话自己可以看看!