我在安装新的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)
--溶液--
根目录中缺少会话目录我已经创建了一个然后问题解决了。
干杯