以下是我如何将csrf添加到表单
$this->addElement('hash', 'csrf', array('ignore' => false));
当发生这种情况时会创建会话,然后当用户发送ajax请求时,通过创建表单实例来验证请求中的值,并且表单始终对于自第一个ajax请求开始有效创建html输出的初始请求
当第二次发送ajax请求时会发生不同的事情,
该表单的实例具有与最初生成的csrf值不同的csrf值,并且当我的代码完成时,最初创建的会话也被销毁,因此没有会话来检查接收到的值,因此表单未经过验证,发生以下错误。
No token was provided to match against
哪个事件的哪些想法,表单的csrf值会自动存储在会话中?
答案 0 :(得分:5)
哈希值在渲染时生成,并在每次请求后无效。
如果您想在表单可能多次提交的AJAX表单中继续使用Zend_Form_Element_Hash
,那么您的AJAX响应应该包含新的哈希值。收到回复后,您应该更新表单数据。
答案 1 :(得分:0)
在视图中没有任何渲染的解决方案:Totaly ajax! How to use Zend Framework Form Hash (token) with AJAX