Symfony -登录页面上的CSRF字段在会话超时和提交不相关的表单后为空


Symfony - CSRF field on login page is empty after session times out and unrelated form is submitted

我使用Symfony 1.4与sfGuardPlugin。如果我的会话超时,而我坐在一个页面内的应用程序,我试图提交一个表单,是在该页面上,我将被重定向到登录页面(这很好,因为我的会话已经超时)。但是它认为登录表单已经提交,并且验证失败——用户名、密码和CSRF都丢失了,并且都是必需的。

为什么它认为我已经提交了登录表单,为什么CSRF是空的?

现在作为一个用户,我完全卡住了,因为我在登录页面上,隐藏的CSRF字段是空的。即使我填写了用户名和密码,我也永远无法通过验证,因为CSRF是必需的。

我真的不知道去哪里找。我的sfGuardPlugin配置是相当标准的,我认为。登录页面和CSRF保护一般工作正常。

我正在使用的动作只是做$this->form->bind($request->getParameter($this->form->getName()), $request->getFiles($this->form->getName()));

你可能会犯一些错误

  1. 通过get和post处理表单。添加if($request->isMethod('post'))来处理仅通过post提交的表单。
  2. 没有在模板中渲染隐藏字段。隐藏CSRF字段。使用echo $form来渲染整个表单或者$form->renderHiddenFields()