Yii验证码不适用于所有控制器

Yoo*_*ian 0 php captcha yii

我有3个名为Site,Ads和Message的控制器.所有控制器都具有验证码操作类定义,并且允许它们存在于每个控制器的访问规则中.

验证码在站点控制器中运行良好,但在其他控制器中验证不起作用.它显示验证码图像和recaptcha也可以,但只是验证不起作用,任何想法调试?

更新:

我已经探究过Yii并找到了一些东西.CCaptcha小部件使用控制器名称作为会话密钥的一部分来存储验证码验证码.

CCaptchaAction.php

protected function getSessionKey(){
    return self::SESSION_VAR_PREFIX . Yii::app()->getId() . '.' .   $this->getController()->getUniqueId() . '.' . $this->getId();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,$ this-> getController() - > getUniqueId()会话密钥一部分.

CCaptchaAction使用此功能生成验证验证码.

问题是在不同的控制器中发生验证.

在一个明显的例子假设我们有一个控制器一个.

当在控制器A中生成验证码生成时,print_r($ _ SESSION)类似于:

阵列([Yii.CCaptchaAction.12bd9136. .captcha] => eyntri [Yii.CCaptchaAction.12bd9136. .captchacount] => 1

当在控制器B中发生验证码验证时,验证方法检查是否

新生成并在控制器B中显示代码 === $ _SESSION [Yii.CCaptchaAction.12bd9136.一个 .captcha]是真还是假.

当发电机和验证器控制器不相同时,它们总是不相等!!

Sam*_*ark 5

  1. 在模型验证规则中,指定captchaAction完全指向您的控制器验证码操作:

    array('verifyCode','captcha','allowEmpty'=>!CCaptcha :: checkRequirements(),'captcaAction'=>'site/captcha'),

  2. 在使用capthca小部件的视图中,再次通过captchaAction以下方式指向您的控制器验证码操作:

    <?php $ this-> widget('CCaptcha',array('captchaAction'=>'site/captcha')); ?>