[Symfony2.8] [FOSUserBundle] CSRF令牌无效,没有使用beta prod部署编写的会话文件

时间:2016-03-22 20:45:04

标签: php symfony session fosuserbundle

我首先发布了我的问题on a french forum,但我认为在这里寻求帮助也是一个好主意。
我想我会直截了当地说。我已经在服务器上为我在开发环境中本地工作的站点部署了测试版。我使用了Capifony和DoctrineMigrations。我正在使用FOSUserBundle和继承FOSUB的自定义UserBundle。一些字段被添加到User类等。不要担心我没有覆盖主视图,并且没有{{form_rest(form)}}缺失或类似的东西。

一切都在本地运行,但正如您所料,在服务器上它并不相同。 app / logs / prod.log什么也没有返回,我试着将一个级别调试:调试到Monolog配置(app / config / config_prod.yml),但它什么都没改变。

有关会话的app / config / config.yml的一部分:

    session:
        handler_id:  session.handler.native_file
        save_path: "%kernel.root_dir%/sessions/"  

[TL; DR] 服务器上没有关于此站点的会话文件,既不在app / sessions中也不在其他任何地方。我认为CSRF令牌无效的问题来自会话问题。

没有任何方式存在权限问题,app / sessions使用正确的chown进行了chmoded 777(与app / logs和app / cache相同)。 web / config.php不会返回配置问题。我不知道如何找到这个问题的原因,因为它完全在本地工作,如果日志中没有任何内容,你就无法在prod环境中调试......有什么想法?

2 个答案:

答案 0 :(得分:0)

所以,这确实是权限问题。这个问题与Capifony有关。 shared_children是符号链接。当你chmod一个符号链接时,它不会chmod任何东西。所以这里例如共享/ app / sessions目录仍然在755这是不够的。

如果你有类似的问题。确保Cap项目目录/ shared中shared_children的权限设置良好。

答案 1 :(得分:0)

我遇到了类似的问题,最终解决方案在php.ini文件中

在生产模式下,变量post_max_size等于100Mo,这不足以发布令牌,伪代码和密码。

我因这个问题xD卡住了3天