Symfony 3.0.1 CSRF令牌存在但无效


Symfony 3.0.1 CSRF token present but invalid

我在安装新的Symfony 3.0.1时遇到了这个奇怪的问题。我生成了一个新的 CRUD 控制器,其中包含一个 url 和一个标题的表单 PostType。没什么好看的。

窗体按预期呈现。它包含我的网址字段和标题字段。在表单内部,还会呈现隐藏的输入字段_token。

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

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

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

我搜索了其他答案,但类似的问题都是由于没有_token输入引起的。

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

就我而言,var/sessions/文件夹不可写。默认值是在 config.yml 上设置的 var/sessions。

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/

我刚刚在Symfony 3.2上遇到了类似的问题

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

几个小时后,我们终于发现问题与session.cookie_secure(https)有关:

我们的生产环境使用 https,因此强制通过 https 保护 cookie。开发环境使用 http。将开发从HTTP移动到HTTPS后,问题已修复。

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

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

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

framework:
    session:
        cookie_secure: false

这对我有用。

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

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

该错误也存在于 3.0.4 中。 save_path: ~为我工作。

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

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

framework:
    session:
        storage_id: session.storage.mock_file

溶液:

删除storage_id: session.storage.mock_file设置解决了问题。

重要提示:您可能需要清除缓存才能使其生效。

有关storage_id配置选项的详细信息,请参阅此处。

我在env=dev上有同样的,但在preprod上没有(symfony 4.4)

--溶液--

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

干杯