yii2 капча не изменяется при обновлении страницы

Я использую стандартную реализацию капчи расширенного фреймворка yii2. У меня проблема: я хочу менять свой код с картинки каждый раз, когда обновляю страницу, но когда я обновляю страницу, мой код с картинки не меняется.

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();
}
}
2

Другие решения

потому что вы установили YII_ENV на TEST, как это defined('YII_ENV') or define('YII_ENV', 'test'); измените это на defined('YII_ENV') or define('YII_ENV', 'prod');

1

попробуй это

<script>

window.onload = hello;

function hello()
{
document.getElementById('loginform-captcha-image').click();
}

</script>
1

Я нашел грязный способ обойти это — просто вызвать click событие, когда страница загружается. Добавьте этот код в самом конце вашего view файл, после окончания формы;

$js = <<<JS
$('#loginform-captcha-image').trigger('click');
JS;
$this->registerJs($js, $this::POS_READY);

Это не очень красиво, но это работает, и я нашел единственный способ справиться с этой проблемой, которая также преследует мои собственные сайты.

0

В вашем контроллере просто unset сеанс капчи:

 session_start();
unset($_SESSION["__captcha/panel/panel-auth/captcha"]);
unset($_SESSION["__captcha/panel/panel-auth/captchacount"]);
0

Обновите свой 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];
}
-1
По вопросам рекламы [email protected]