Zend_Form_Element_Hash随机故障


Zend_Form_Element_Hash random failures

我的网站上有各种形式的 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);

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

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

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

编辑:

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

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

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