Search code examples
phpzend-frameworkzend-formcsrf

how to reinitialize Zend_Form_Element_Hash?


On my web page I have Zend_Form with CSRF hash. It submits to the same page and it is used to update user's data (name, surname, birthdate and so on...). I would like to reinitialize CSRF hash after every valid post submission. How I could do it?

Now when I first time submit 'user data' form I get proper behavior (user data gets updated). But if I submit again (right after first, proper submit) to change another form field I get error saying:

The two given tokens do not match

Is there anyway to reinitialize hash properly?


Solution

  • My problem came from tampering with Zend_Form_Element_Hash init methods, I had this:

    $_csrf = new Zend_Form_Element_Hash($this->_csrfName);  
    $_csrf->setSalt(md5($name));  
    $_csrf->setAttrib('id', '');  
    $_csrf->initCsrfToken();  
    

    The last line should never be there. When I removed it, everything started to act correctly.
    @RockyFord: The initCsrfToken() function was place I was looking at the beginning, but
    for me (I mean my intuition) it just couldn't be that. So I just debugged, debugged, debugged,
    and at last commenting out 4th line was proper solution. Sorry for holding off reply, I totally forgot.