我正在使用yii2高级框架的默认验证码实现。我有一个问题:每次刷新页面时我想更改我的验证码,但是当我刷新页面时,我的验证码不会改变。
答案 0 :(得分:3)
最正确的解决方案是创建自己的CaptchaAction
,扩展yii\captcha\CaptchaAction
并覆盖run()
方法,如下所示:
namespace app\actions; // Change to your own
class CaptchaAction extends yii\captcha\CaptchaAction {
public $autoRegenerate = true;
public function run()
{
if ($this->autoRegenerate && Yii::$app->request->getQueryParam(self::REFRESH_GET_VAR) === null) {
$this->setHttpHeaders();
Yii::$app->response->format = Response::FORMAT_RAW;
return $this->renderImage($this->getVerifyCode(true));
}
return parent::run();
}
}
答案 1 :(得分:1)
因为您已将YII_ENV设置为TEST,因此defined('YII_ENV') or define('YII_ENV', 'test');
将其更改为defined('YII_ENV') or define('YII_ENV', 'prod');
答案 2 :(得分:1)
试试这个
<script>
window.onload = hello;
function hello()
{
document.getElementById('loginform-captcha-image').click();
}
</script>
答案 3 :(得分:0)
我发现了一种肮脏的方式 - 只需在页面加载时触发click
事件。在表单结束后,在view
文件的最后添加此代码;
$js = <<<JS
$('#loginform-captcha-image').trigger('click');
JS;
$this->registerJs($js, $this::POS_READY);
它不是很漂亮,但它有效,而且这是我发现这个问题的唯一方法,这也困扰着我自己的网站。
答案 4 :(得分:0)
在您的控制器中,只需unset
个验证码会话:
session_start();
unset($_SESSION["__captcha/panel/panel-auth/captcha"]);
unset($_SESSION["__captcha/panel/panel-auth/captchacount"]);
答案 5 :(得分:0)
这对我有用
$(document).ready(function(){
setTimeout(() => {
$("#form-captcha-image").click();
}, 100);
});
答案 6 :(得分:-1)
将您的CaptchaAction
更新为
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => null,
],
];
}
如果设置为fixedVerifyCode
,则验证码与fixedVerifyCode
中设置的值相同
// code from yii\captcha\CaptchaAction in Yii2
public function getVerifyCode($regenerate = false)
{
if ($this->fixedVerifyCode !== null) {
return $this->fixedVerifyCode;
}
$session = Yii::$app->getSession();
$session->open();
$name = $this->getSessionKey();
if ($session[$name] === null || $regenerate) {
$session[$name] = $this->generateVerifyCode();
$session[$name . 'count'] = 1;
}
return $session[$name];
}