Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么我在表单中添加散列时zend示例停止工作_Php_Zend Framework_Zend Form - Fatal编程技术网

Php 为什么我在表单中添加散列时zend示例停止工作

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); 这段额外的代码会把一切都抛在脑后。当我现在提交表单时,它给出了两个令牌不匹配的错误 一些疑难解答: 问题不

我将遵循这个示例教程

项目代码:

教程:

项目代码按预期运行,直到我将哈希元素添加到表单中。我所做的就是在application/forms/Signup.php下的表单中添加这些代码

$hash = new Zend_Form_Element_Hash('hash');
$hash->setSalt('mysalt');
$this->addElement($hash);
这段额外的代码会把一切都抛在脑后。当我现在提交表单时,它给出了两个令牌不匹配的错误

一些疑难解答:

  • 问题不在于散列本身,因为它在我的其他示例中运行良好
  • 我认为这与本例中如何处理请求有关,但不确定问题到底是什么。我认为这与跃点计数有关,但当我编辑Zend_Form_Element_散列并将跃点计数从1更改为100时,仍然得到相同的错误
这就是我在Zend的专业水平上所能想到的故障排除范围。所以我想是时候问问大脑袋了。我希望有人能找到答案。

来自:

此元素可防止表单受到CSRF攻击,确保数据由生成表单的用户会话提交,而不是由恶意脚本提交。通过向表单中添加哈希元素并在提交表单时对其进行验证来实现保护

哈希元素的名称应该是唯一的。我们建议对元素使用salt选项-具有相同名称和不同salt的两个哈希不会冲突:

$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”配合使用效果很好。