0

我使用 symfony 1.4.8 并且在尝试呈现隐藏的 csrf 表单字段时,没有将值添加到呈现的字段中。我以前做过这个没有问题。请参阅下面的示例以查看代码和呈现的输出。

代码:

<?php echo $form['_csrf_token']->render(); ?>

生成:

<input type="hidden" name="contact[_csrf_token]" id="contact__csrf_token" />

代码:

<?php echo $form['_csrf_token']->renderRow(); ?>

生成:

<tr>
  <th><label for="contact__csrf_token"> csrf token</label></th>
  <td><input type="hidden" name="contact[_csrf_token]" value="3cf960d4553e2649f86d0ccd12a26efe" id="contact__csrf_token" /></td>
</tr>

如您所见,第二种方法生成 csrf_token 的值,但它也生成所有其他行信息。该render()方法应该只生成带有值的“小部件”(在这种情况下是隐藏的输入字段)。由于某种原因,它没有增加价值。

4

4 回答 4

1

为什么需要显式渲染它?你为什么不使用$form->renderHiddenFields()

于 2010-11-10T19:01:23.160 回答
0

改为使用$form->renderHiddenFields()

于 2010-11-10T19:02:22.597 回答
0

您必须进行一次硬刷新。您的会话中出现了问题。

硬刷新是 Shift+F5

如果失败,请删除您域的所有域 cookie,然后重试。

这只是一个会话问题,前提是您没有在其他地方弄乱 csrf。

于 2010-11-10T19:08:36.750 回答
0

尽管在 symfony 中这种行为有很多不同的原因:

  • 在处理表单验证之前不要使用绑定。
  • 会话时间结束,没有会话 ID。
  • CSRF 验证已禁用或未在settings.yml文件中设置csrf_secret

我提出了一个直接打印 CSRF Token 值的快速解决方案:

<input type="hidden" name="signin[_csrf_token]" id="signin__csrf_token" value="<?php echo $form->getCSRFToken(); ?>" />

使用:

$form->getCSRFToken();

将呈现一个新生成的 CSRF Token。

于 2014-09-19T21:35:48.043 回答