2 Stimmen

Zend_captcha schlägt immer bei isValid() fehl

Ich habe ein Problem mit Zend_Captcha, das immer false zurückgibt, wenn die Seite übermittelt wird und die isValid()-Methode des Captchas aufgerufen wird. Es macht mich verrückt, denn meiner Meinung nach sollte das funktionieren.

Ich fange damit an, dies oben in der Aktionsfunktion des Controllers zu deklarieren

$captcha = new Zend_Captcha_Image('captcha',
    array(
        'captcha' => array(
            'name' => 'graduatesignupcaptcha',
            'wordlen' => 6,     
            'font' => $this->config->captcha->font,
            'imgDir' => $baseUrl.'/images/captcha/',
            'imgUrl' => $this->config->webserver->name.'/images/captcha/',
        )
    )
);
$captcha->setHeight(80)
        ->setTimeout(300);

Ich mache die übliche Formvalidierung und das funktioniert alles, aber wenn es darum geht, den eingegebenen Wert in das Captcha-Formular zu validieren, gibt es immer false zurück.

//als nächstes überprüfen wir den Captchatext, um sicherzustellen, dass es sich bei dem Formular um eine Person und nicht um ein Skript handelt    
$captchaText = $form->getElement('captchainput')->getValue();
$captchaId = $form->getElement('captchaid')->getValue();
//$captchaSession = new Zend_Session_Namespace('Zend_Form_Captcha_'.$captchaId);

$captchaArray = array(
 'id' => $captchaId,
 'input' => $captchaText     
);

if(!$captcha->isValid($captchaArray)){

 $log->log(implode(",",$captcha->getErrors()), Zend_Log::DEBUG); 

 $form->getElement('captchainput')->setErrors(array('messages' => 'Ungültiger Sicherheitscode'));     
 $formFailed = true;
}

Ich habe überprüft, ob die ID, die ich bekomme und als verstecktes Element in meinem Formular speichere, mit dem generierten Bild übereinstimmt, aber egal was ich tue, es schlägt immer fehl.

Fehlt mir hier etwas Einfaches?? Oder gibt es eine bessere Möglichkeit, damit umzugehen??

Vielen Dank,

2voto

StasM Punkte 10085

Es könnte etwas mit Sitzungen zu tun haben - möglicherweise werden Sitzungswerte nicht ordnungsgemäß gespeichert. Überprüfen Sie, was Sie in Ihrer $_SESSION haben - sollte so etwas sein wie:

  \["\_\_ZF"\]=>
   array(1) {
   \["Zend\_Form\_Captcha\_ef828f68e467db99e8f358244ad6c667"\]=>
     array(2) {
        \["ENNH"\]=>
        int(1)
      \["ENT"\]=>
        int(1260764250)
      }
    }
    \["Zend\_Form\_Captcha\_ef828f68e467db99e8f358244ad6c667"\]=>
    array(1) {
      \["word"\]=>
      string(6) "fubara"
    }

Beachten Sie, dass Sie wahrscheinlich $captchaId vom neuen Captcha nehmen, aber es könnte sein, dass Sie in der Sitzung immer noch die ID für das alte haben. Überprüfen Sie, ob die IDs wirklich übereinstimmen.

Falls nicht, überprüfen Sie, ob Ihre Sitzungen funktionieren, wenn ja, handelt es sich wahrscheinlich um einen Fehler - reichen Sie einen Fehlerbericht beim ZF Issue Tracker ein.

0voto

cybernetica Punkte 11

Es funktioniert für mich

Zend_Loader::loadClass('Zend_Session_Namespace');
$sessionNamespace = new Zend_Session_Namespace('cptc');

Zend_Loader::loadClass('Zend_Captcha_Image');
$captcha = new Zend_Captcha_Image();
$captchaArray = array(
        'id' => $sessionNamespace->code,
        'input' => $filter->filter($this->_request->getParam('captcha'))     
            );
     if ($captcha->isValid($captchaArray)) {
     //deine Aktion hier
     }

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X