【问题标题】:Yii2 multi captcha in one pageYii2 多验证码在一页中
【发布时间】:2016-04-13 19:22:44
【问题描述】:

我有一个页面,其中包含多个验证码,以单独的形式形成,例如登录和注册模式等。 如果我使用下面的代码,问题是当刷新一个验证码时,另一个验证码将无法使用,因为它们使用相同的会话变量:

1) 登录

登录模式(视图):

echo Captcha::widget([
    'id' => 'Login-captcha',
    'name' => 'LoginModel[captcha]',
    'captchaAction' => '/site/captcha'
]);

登录模型:

public function rules()
{
    return [              
        ['captcha', 'captcha'],
    ];
}

2) 注册

注册模态(视图):

echo Captcha::widget([
    'id' => 'register-captcha',
    'name' => 'RegisterModel[captcha]',
    'captchaAction' => '/site/captcha'
]);

注册模型:

public function rules()
{
    return [              
        ['captcha', 'captcha'],
    ];
}

为了解决会话问题,我使用了不同的验证码操作来设置不同的会话变量:

1)登录

登录模式视图:

echo Captcha::widget([
    'id' => 'Login-captcha',
    'name' => 'LoginModel[captcha]',
    'captchaAction' => '/site/captcha-login'
]);

登录模型:

public function rules()
{
    return [              
        ['captcha', 'captcha', 'captchaAction' => 'site/captcha-login',],
    ];
}

2) 注册

注册模态(视图):

echo Captcha::widget([
    'id' => 'register-captcha',
    'name' => 'RegisterModel[captcha]',
    'captchaAction' => '/site/captcha-register'
]);

注册模型:

public function rules()
{
    return [              
        ['captcha', 'captcha', 'captchaAction' => 'site/captcha-register',],
    ];
}

到目前为止一切正常,但是当我通过主配置文件的组件部分中的以下配置将会话从常规 php 文件移动到数据库时:

'session' => [
     'class' => 'yii\web\DbSession',
 ],

然后第一页加载中的验证码不起作用,必须刷新它们才能正常工作。 有什么问题?

【问题讨论】:

    标签: yii2 captcha


    【解决方案1】:

    试试这个,它是为 yii1 设计的,但你可以理解,更多 detail

    public function rules()
    {
        return array(
            ...
            array('verifyCode1', 'captcha', ...
            array('verifyCode2', 'verifycaptcha2', ...
        );
    }
    
    public function verifycaptcha2($attribute, $params)
    {
            $captcha2 = Yii::app()->getController()->createAction('captcha2nd');
            if (!$captcha2->validate($this->verifyCode2, false))
            {
                    $this->addError('verifyCode2', 'invalid captcha.');
            }
    }
    

    另见this

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多