Cakephp项目中Captcha验证码的解决方案!

thinkly 发布于 2009/06/25 16:28
阅读 3K+
收藏 1

原文章地址:http://www.thinkly.cn/index.php/archives/278

Captcha官方

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

Captcha下载

http://thinkly.cn/download/tools/kcaptcha_1.2.6.rar

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

image

使用方法超级简单

 

getImage.php

1.<?php
2.session_start();
3.include('kcaptcha.php');
4.$captcha = new KCAPTCHA();
5.?>

index.php

1.<html>
2.<body>
3.<img src="getImage.php" />
4.</body>
5.</html>

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

1.//Captche会自动在Session中存储一个名为captcha_keystring的字符串
2.//只要验证一下提交的验证码是否和它相等就OK了
3. 
4.if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring']){
5.    echo "Correct";
6.}else{
7.    echo "Wrong";
8.}

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

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

将kcaptcha文件夹拷贝到vendors目录

image

在components中写一个新的组件

image

代码如下:

01.<?php
02.class CaptchaComponent extends Object {
03.    var $Controller = null;
04. 
05.    function startup(&$controller)
06.    {
07.        $this->Controller = $controller;
08.    }
09. 
10.    function render()
11.    {
12.        App::import('vendor', 'kcaptcha/kcaptcha');
13.        $kcaptcha = new KCAPTCHA();
14.        $this->Controller->Session->write('captcha', $kcaptcha->getKeyString());
15.        exit;
16.    }
17. 
18.}
19.?>

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

01.class UsersController extends AppController {
02. 
03.    var $name        = 'Users';
04.    var $components  = array('Captcha');
05. 
06.    function captcha() {
07.        Configure::write('debug', '0');
08.        $this->autoRender = false;
09.        $this->Captcha->render();
10.    }
11. 
12.}

视图中的调用

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

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

01.function _checkCaptcha($model) {
02.    if ($this->Session->check('captcha')) {
03.        $s_captcha = $this->Session->read('captcha');
04. 
05.        if (!empty($this->data[$model]['captcha']) && $this->data[$model]['captcha'] == $s_captcha) {
06.            return true;
07.        }
08.    }
09. 
10.    return false;
11.}

 

总结

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

Captcha的配置文件为kcaptcha_config.php

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

加载中
0
y
yanhongsheng

我想在cakephp的auth登录认证组件的基础上,增加验证码。
验证码我用Captcha组件实现。
我下载了captcha,然后创建了组件captcha。
然后在UsersController中引用组件captcha和写生成验证码的操作captcha。
现在在视图中,可以显示出验证码。但是没有找到办法把检查验证码和auth组件结合使用的方法。
我看您的文章,有一个函数检验验证码的,这个函数如何和auth的登录认证组合使用?
function _checkCaptcha($model)

返回顶部
顶部