2011-01-13 10 views
5

estoy siguiendo este ejemplo tutorialPor qué este ejemplo Zend deja de funcionar cuando agrego un hash a la forma

código del proyecto: http://akrabat.com/wp-content/uploads/zf-tutorial-layoutform.zip

tutorial: http://akrabat.com/zend-framework/a-form-in-your-layout/

El código de proyecto se ejecuta como se esperaba, hasta que agregue un elemento hash a la forma. Todo lo que hago es poner este código en la forma bajo la aplicación/formas/signup.php

$hash = new Zend_Form_Element_Hash('hash'); 
$hash->setSalt('mysalt'); 
$this->addElement($hash); 

Este bit extra de código produce todo lo que fuera. Cuando envío el formulario ahora, me da el error de que los 2 tokens no coinciden.

Algunos de solución de problemas:

  • El problema no es el hash en sí, ya que funciona muy bien en mis otros ejemplos.
  • Creo que tiene que ver con cómo se maneja la solicitud en este ejemplo, pero no estoy seguro de cuál es el problema exactamente. Pensé que tenía que ver con el recuento de saltos, pero cuando edité Zend_Form_Element_Hash y cambié el recuento de saltos de 1 a 100, sigo teniendo el mismo error.

Ese es el alcance de la solución de problemas que podría pensar en mi nivel de experiencia con Zend. Así que pensé que era hora de preguntarle a los grandes cerebros. Espero que alguien pueda resolverlo.

+0

Como el elemento hash hace uso de zend_session que podría ser un problema. Otra cosa que debe verificarse son los saltos hasta la validación, ya que el hash expira después de un salto (o después de un tiempo de espera). – Fge

+0

No, está codificado. Pero es posible que desee comparar el contenido de la sesión y los datos del formulario enviado. ($ _SESSION vs $ _POST) y eliminar los redireccionamientos para la depuración. – Fge

+0

No directamente. Pero es más de uno si su barra de navegación muestra algo más que el objetivo de los formularios. Pero si no redirige, debería verificar $ _SESSION/$ _ POST. – Fge

Respuesta

2

Funciona para usted incluso después de haber agregado el elemento hash al formulario? Si es así, ¿podría subir su proyecto y publicarlo como una respuesta separada?

Todo lo que hice fue agregar el código que publicó y funcionó bien. ¿Dónde estás usando este código? Suena como algo relacionado con tu entorno?

0

Desde: Zend_Form_Element_Hash

Este elemento proporciona protección contra los ataques CSRF en los formularios, asegurando los datos se presentan en la sesión de usuario que genera la forma y no por un script sin escrúpulos. La protección se logra agregando un elemento hash a un formulario y verificándolo cuando se envía el formulario.

El nombre del elemento hash debe ser único. Recomendamos el uso de la opción de sal para los hashes elemento, dos con los mismos nombres y diferentes sales no chocan:

$form->addElement('hash', 'no_csrf_foo', array('salt' => 'unique'));

Es posible ajustar la sal posteriormente con el ($ sal) setSalt método.

Internamente, el elemento almacena un identificador único que utiliza Zend_Session_Namespace, y lo verifica al enviarlo (verificando que el TTL no ha expirado). El validador "Idéntico" se usa para garantizar que el hash presentado coincida con el hash almacenado.

El helper de vista 'formHidden' se utiliza para representar el elemento en el formulario.

Voy a tratar:

$form->addElement('hash', 'unique_form_name', array('salt' => 'unique_salt'));

no veo única forma nombre/de hash en el código y esta es la razón por tokens no Mach.

+0

¿No es la cadena 'hash' que se usa para crear el elemento con su nombre único? –

+0

El nombre no es el problema. Funciona muy bien con el nombre "hash". – user570783

Cuestiones relacionadas