0

1 ページに 2 つのフォームがあり、1 つはログイン用で、もう 1 つはパスワードを忘れた場合です。

<?php echo $this->layout()->user_login = $this->action('login','user',null); ?>
<?php echo $this->layout()->user_forgot = $this->action('forgot','user',null); ?>

フォームはアクションであり、各フォームには独自のビューがあります。アクションを忘れたハッシュバリデータがありますが、忘れたフォームを送信すると、「与えられた2つのトークンが一致しません」というエラーが表示され、レイアウト中に考えますprocess 、フォームがインスタンス化され、ハッシュIDが変更されます:(修正方法がわかりません...

それは忘れられた形です

<?php
class listab_Form_Forgot extends Zend_Form
{
public function init()
{
    $this->addPrefixPath("listab_Model",'listab/Model/','decorator');
    // initialize form
    $this->setAction('/user/forgot')
         ->setMethod('post');
    // create text input for name 
    $user = new Zend_Form_Element_Text('name');
    $user->setLabel('username or email')
         ->setOptions(array('size' => '30'))
         ->addFilter('HtmlEntities')            
         ->addFilter('StringTrim')
         ->setDecorators(array('ViewHelper','Label'))         
         ->setRequired(true);

    $submit = new Zend_Form_Element_Submit('subfg');
    $submit->setLabel('help me find my password')
           ->setOrder(100)
           ->setOptions(array('class' => 'submit'))
            ->setAttrib('class', 'gbox ozvbut') 
           ->setDecorators(array('ViewHelper');


    $hash = new Zend_Form_Element_Hash('hashs');
    $hash->setSalt('wannaknowthisha?')  ;

    $this->addElement($user)
            ->addElement($hash)
            ->addElement($submit) ;               
}

}

4

1 に答える 1

0

デフォルトのttl = 1 (生存時間) に 1 ホップまたは 2 ホップを追加してみてください。あるアクションでフォームをインスタンス化し、別のアクションで処理しているようです。これにより、ハッシュがタイムアウトする可能性があります (おそらく)。

$hash = new Zend_Form_Element_Hash('hashs');
    $hash->setSalt('wannaknowthisha?');
    $hash->setTimeout(2);//Set timeout for CSRF session token

お役に立てれば...

于 2012-06-23T10:51:19.733 に答える