我的网站上有各种形式的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);
答案 0 :(得分:1)
事实证明,问题是由令牌命名引起的。我有一个名为'token'的标准哈希元素,它被添加到所有表单中。我更改了代码,以便令牌名称前面加上表单名称,而不是'token',它们现在是'loginformtoken'等。
我仍然不确定这是否是由于重定向导致我的代码出现问题,或者ZF是否在任何地方使用内部“令牌”会话(单词令牌似乎在ZF源代码中使用得相当多)导致了冲突。
尽管如此,使用独特的哈希id似乎是前进的方向,我将来会遵循这个标准。
修改强>
完全没有阅读手册,这是我的错:
哈希元素的名称应该是唯一的。我们建议对元素使用salt选项 - 具有相同名称和不同盐的两个哈希不会发生冲突。
我有一个默认的盐和相同的哈希名称,所以难怪我遇到了问题。