Php 为什么我在表单中添加散列时zend示例停止工作
我将遵循这个示例教程 项目代码: 教程: 项目代码按预期运行,直到我将哈希元素添加到表单中。我所做的就是在application/forms/Signup.php下的表单中添加这些代码Php 为什么我在表单中添加散列时zend示例停止工作,php,zend-framework,zend-form,Php,Zend Framework,Zend Form,我将遵循这个示例教程 项目代码: 教程: 项目代码按预期运行,直到我将哈希元素添加到表单中。我所做的就是在application/forms/Signup.php下的表单中添加这些代码 $hash = new Zend_Form_Element_Hash('hash'); $hash->setSalt('mysalt'); $this->addElement($hash); 这段额外的代码会把一切都抛在脑后。当我现在提交表单时,它给出了两个令牌不匹配的错误 一些疑难解答: 问题不
$hash = new Zend_Form_Element_Hash('hash');
$hash->setSalt('mysalt');
$this->addElement($hash);
这段额外的代码会把一切都抛在脑后。当我现在提交表单时,它给出了两个令牌不匹配的错误
一些疑难解答:
- 问题不在于散列本身,因为它在我的其他示例中运行良好李>
- 我认为这与本例中如何处理请求有关,但不确定问题到底是什么。我认为这与跃点计数有关,但当我编辑Zend_Form_Element_散列并将跃点计数从1更改为100时,仍然得到相同的错误
$form->addElement('hash','no_csrf_foo',array('salt'=>'unique')代码>
以后可以使用setSalt($salt)方法设置salt
在内部,元素使用Zend_Session_名称空间存储唯一标识符,并在提交时检查它(检查TTL是否已过期)。然后使用“相同”验证器确保提交的哈希与存储的哈希匹配
“formHidden”视图辅助对象用于呈现表单中的元素
我会尝试:
$form->addElement('hash','unique_form_name',array('salt'=>'unique_salt')代码>
我在您的代码中看不到唯一的表单/哈希名称,这就是令牌不存在的原因。即使您将哈希元素添加到表单中,它也适用于您?如果是这样的话,请上传你的项目并作为一个单独的答案发布
我所做的只是添加了你发布的代码,效果很好。你在哪里使用这个代码?这听起来与您的环境有关?因为散列元素使用zend_会话,这可能是个问题。另一件要检查的事情可能是验证前的跳数,因为哈希在一跳后(或超时后)过期。不,它是硬编码的。但是您可能希望比较会话内容和提交的表单数据。($\u SESSION vs$\u POST)并删除任何用于调试的重定向。而不是直接删除。但是如果你的浏览器显示了表单目标以外的任何内容,那么它就不止一个了。但是,如果你不重定向,你真的应该检查$\u SESSION/$\u POST。你在任何地方都有这个直播吗?这对我来说很好。我所做的就是添加你发布的代码,效果很好。你在哪里使用这个代码?这听起来似乎与您的环境有关。用于创建元素的字符串散列不是唯一名称吗?名称不是问题所在。它与名称“hash”配合使用效果很好。