Php Zend_Form_Element_散列随机故障

Php Zend_Form_Element_散列随机故障,php,zend-framework,zend-form,zend-form-element,Php,Zend Framework,Zend Form,Zend Form Element,我的站点上有大量各种形式的ZF1 salt hash元素,99%的时间它们工作正常,但偶尔会失败。这通常发生在重定向之后,但不在重定向跃点内。表单是在单独的操作中重定向之后创建的,所以我不理解重定向为什么会影响表单。失败的表单正确地生成了它们的令牌,只是在POST和验证之后它们不匹配 有什么想法吗 下面的哈希元素: $token = $this->createElement( 'hash', 'token', array('timeout' => 1440

我的站点上有大量各种形式的ZF1 salt hash元素,99%的时间它们工作正常,但偶尔会失败。这通常发生在重定向之后,但不在重定向跃点内。表单是在单独的操作中重定向之后创建的,所以我不理解重定向为什么会影响表单。失败的表单正确地生成了它们的令牌,只是在POST和验证之后它们不匹配

有什么想法吗

下面的哈希元素:

$token = $this->createElement(
    'hash', 
    'token', 
    array('timeout' => 1440)
);

$token->setSalt($config->csrf->salt)
      ->addErrorMessage('The session for this form has timed out.');

$this->addElement($token);

事实证明,问题是由于令牌命名引起的。我有一个名为“token”的标准哈希元素,它被添加到所有表单中。我更改了代码,使令牌名前面加上了表单名,而不是“token”,它们现在是“loginformtoken”,等等

我仍然不确定这是否是因为我的代码中存在重定向问题,或者ZF是否在任何地方使用内部“令牌”会话(在ZF源代码中,令牌这个词似乎被大量使用)导致了冲突

然而,使用唯一的散列ID似乎是前进的方向,我将在将来遵循这个标准

编辑:

这完全是我的错,因为我没有阅读手册:

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


我有一个默认的salt和相同的hash名称,所以难怪我有问题。

结果表明问题是由于令牌命名引起的。我有一个名为“token”的标准哈希元素,它被添加到所有表单中。我更改了代码,使令牌名前面加上了表单名,而不是“token”,它们现在是“loginformtoken”,等等

我仍然不确定这是否是因为我的代码中存在重定向问题,或者ZF是否在任何地方使用内部“令牌”会话(在ZF源代码中,令牌这个词似乎被大量使用)导致了冲突

然而,使用唯一的散列ID似乎是前进的方向,我将在将来遵循这个标准

编辑:

这完全是我的错,因为我没有阅读手册:

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


我有一个默认的salt和相同的hash名称,所以难怪我有问题。

听起来像是分段错误?apache日志显示了什么?完全没有。这是我检查的第一件事。我怀疑这是segfault,因为我可以在多台服务器上重现该问题。你所说的“只是不匹配”到底是什么意思?帖子前后的标记不同,这就是抛出错误的原因。这就好像哈希在某个不应该的时候被重新生成一样。我同意哈希正在被重新生成。我将向
setSalt()
方法添加一些调试,并查看何时以及谁在调用他。我打赌你会找到罪犯的。太糟糕了,听起来很难复制。祝你好运听起来像是分割错误?apache日志显示了什么?完全没有。这是我检查的第一件事。我怀疑这是segfault,因为我可以在多台服务器上重现该问题。你所说的“只是不匹配”到底是什么意思?帖子前后的标记不同,这就是抛出错误的原因。这就好像哈希在某个不应该的时候被重新生成一样。我同意哈希正在被重新生成。我将向
setSalt()
方法添加一些调试,并查看何时以及谁在调用他。我打赌你会找到罪犯的。太糟糕了,听起来很难复制。祝你好运