Symfony 3.0.1 CSRF令牌存在但无效

时间:2016-02-04 18:02:28

标签: php forms symfony

我遇到了一个新的Symfony 3.0.1安装这个奇怪的问题。我生成了一个带有Form PostType的新CRUD控制器,它包含一个url和一个标题。没什么好看的。

表单按预期呈现。它包含我的url字段和title字段。在表单内部,还会呈现隐藏的输入字段_token。

提交此表单时,我会一直收到以下错误:

The CSRF token is invalid. Please try to resubmit the form.

因此令牌被添加到表单中,它包含一个值,我有一个常量的PHP会话cookie值,只是这个令牌无效。

我已经搜索了其他答案,但类似的问题都是由缺少_token输入引起的。

Symfony 3.0.2 / 3.0.3中也会出现此问题。

7 个答案:

答案 0 :(得分:13)

在我的情况下,var/sessions/文件夹不可写。默认值为var / sessions,它在config.yml中设置。

session:
    # http://symfony.com/doc/current/reference/configuration/framework.html#handler-id
    handler_id:  session.handler.native_file
    save_path:   "%kernel.root_dir%/../var/sessions/%kernel.environment%"

确保var/ folders可写。

chmod 775 -R var/sessions/
chmod 775 -R var/log/
chmod 775 -R var/cache/

答案 1 :(得分:6)

我刚与Symfony 3.2有类似的问题

  

CSRF令牌无效。请尝试重新提交表单。

下班后,我们终于发现问题与session.cookie_secure(https)有关:

我们的生产环境使用https,因此强制通过https保护cookie。开发环境使用http。将开发人员从HTTP移至HTTPS后,问题得以解决。

答案 2 :(得分:1)

我正在使用Symfony 3.2.1,它在一台机器上工作,但在另一台机器上工作。不知道为什么。

@Shrihari他的回答让我得到了以下解决方案。

我的项目也有cookie_secure: true。 我更新了config_dev.yml并在文件中添加了cookie_secure: false

framework:
    session:
        cookie_secure: false

这对我有用。

答案 3 :(得分:0)

似乎是symfony版本> 3.0,< 3.0.3中的错误。

正如@yellowmen指出的那样,更改framework.session.save_path中的config.yml可以解决问题。

答案 4 :(得分:0)

该错误也出现在3.0.4中。 save_path: ~为我工作。

答案 5 :(得分:0)

dev切换到test环境时,Symfony 4.2遇到了类似的问题。

我的framework.yaml文件中有以下设置:

framework:
    session:
        storage_id: session.storage.mock_file

解决方案:

删除storage_id: session.storage.mock_file设置可以解决此问题。

重要:您可能必须清除缓存才能生效。

有关storage_id-配置选项的更多信息,请参见here

答案 6 :(得分:0)

我在env = dev上有相同的东西,但在preprod(symfony 4.4)上却没有

-解决方案-

根目录中缺少会话目录 我创建了一个,然后问题解决了。

欢呼