2016-04-13 3 views
0

Ich habe eine Seite, die Multi-Captcha in getrennten Formularen Beispiel Anmelde-und Register-Modalitäten usw. enthält. Wenn ich unter Codes verwenden, ist das Problem, dass beim Aktualisieren eines Captcha dann ein anderes Captcha unbrauchbar sein wird sie verwenden dieselbe Sitzung varible:Yii2 Multi Captcha in einer Seite

1) Loggen

Login modal (Ansicht):

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

LoginModel:

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

2) Register

Register modal (Ansicht):

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

RegisterModel:

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

Sitzung Problem zu lösen, ich verschiedene Captcha-Aktionen verwendet, um verschiedene Session-Variablen zu setzen:

1) Login

modal view 0

Login:

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

LoginModel:

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

2) Registrieren

Register modal (Ansicht):

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

RegisterModel:

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

bis jetzt ist alles in Ordnung, aber wenn ich ich bewege Sitzungen von normalen PHP-Dateien in der Datenbank von unten config in commponent Abschnitt der Hauptkonfigurationsdatei:

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

dann Captchas im ersten Laden der Seite nicht funktioniert und habe um sie zu aktualisieren, damit sie korrekt funktionieren. Was ist das Problem?

Antwort

0

die Sie interessieren, ist es für yii1 ist, aber Sie können auf die Idee kommen, mehr 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.'); 
     } 
} 

Siehe auch this