Kohana Captcha模块

时间:2013-02-21 20:17:14

标签: php frameworks kohana captcha

我正在尝试将kohana-captcha module用于Kohana 3.3项目。在验证之前一切正常。

问题是,无论生成什么图像,验证码模块总是会显示不同的答案。以下是我的代码示例:

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_User extends Controller_Template {

    public $template = "template";

    public function action_create()
    {
            if (isset($_POST['captcha']))
            {
                print $_POST['captcha'];
                print ">>>".Captcha::valid($_POST['captcha'])."<<<";
            }

            $captcha = Captcha::instance();

            $this->template->content = View::factory('user/create')
                ->bind('captcha', $captcha);
    }
}

?>

查看代码:

<form method="post" action="/user/create/" class="form-horizontal" id="form">
    <div class="control-group">
        <label class="control-label" for="inputCaptcha">
            <?=$captcha?>
        </label>
        <div class="controls">
          <input type="text" id="inputCaptcha" placeholder="Код с картинки" name="captcha">
          <span class="help-inline"></span>
        </div>
    </div>    
</form>

$_SESSION and $_COOKIE数组也是空的。 关键是我看到验证码图像,输入代码,提交表单然后什么也得不到。 Captcha::valid($_POST['captcha'])没有告诉我什么。当我尝试在print_r($captcha)之后创建Captcha::instance()时,它会向我显示一个带有受保护“响应”属性的对象,但它包含完全不同的字母和数字。

例如,我看到带有“KX5R”验证码的图像,这是print_r($ captcha)的结果:

Captcha_Alpha Object ( [driver:protected] => [response:protected] => MWXF [image:protected] => [image_type:protected] => png )

有任何建议吗?

1 个答案:

答案 0 :(得分:1)

您应检查POST变量(在本例中为“验证码”)是否等于验证码的实例。因此,您应在Captcha声明if声明之前启动post对象。

这样的事情:

$captcha = Captcha::instance();

$this->template->content = View::factory('user/create')
    ->set('captcha', $captcha);

if ($this->request->method() === Request::POST)
{
    if (Captcha::valid($_POST['captcha']))
        .. do something if captcha is OK
    else 
        ..do something if captcha is not OK 
}