Zend_Form_Element_Hash随机失败

时间:2012-08-08 14:15:43

标签: php zend-framework zend-form zend-form-element

我的网站上有各种形式的ZF1盐渍哈希元素,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);

1 个答案:

答案 0 :(得分:1)

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

我仍然不确定这是否是由于重定向导致我的代码出现问题,或者ZF是否在任何地方使用内部“令牌”会话(单词令牌似乎在ZF源代码中使用得相当多)导致了冲突。

尽管如此,使用独特的哈希id似乎是前进的方向,我将来会遵循这个标准。

修改

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

  

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

我有一个默认的盐和相同的哈希名称,所以难怪我遇到了问题。