Symfony2 session and cache:clear command


Symfony2 session and cache:clear command

我使用Symfony会话来存储和检索用户在启动页面上选择的语言。如果他们没有语言设置,他们将直接重定向到splash。此行为按预期工作。

不幸的是,当我清除缓存时,我遇到了问题(我使用php app/console cache:clear --env=prod命令)。用户可以访问一个页面,然后在任何点击他们被重定向到飞溅。之后,即使他们选择了一种语言,他们也将无法进入主页以外的任何地方,任何点击都会再次重定向到splash。

如果我手动删除缓存文件夹,错误将不会发生。

我的会话相关配置如下:

framework:
    session:
        handler_id:  ~
        gc_probability: 0
我的缓存目录中没有会话文件夹。我可以找到我的会话文件到我的网站tmp文件夹(会话id和内容匹配用户会话cookie和语言选择)。它们被保存在cache:clear命令之后,但似乎Symfony再也不能从这些文件中获取值了。此外,没有为这些用户创建新的会话文件,并且似乎无法在任何地方编写新的语言选择。

我在本地开发环境(改进的Homestead)上没有错误,但我在所有其他环境(开发,分期,生产)上都有错误

使用会话->

invalidate ();在启动页面将解决这个问题。但我想知道为什么会这样。有什么想法吗?

您可以更改Symfony保存会话数据的目录,以便在清除缓存时会话保持活跃。您只需要更改框架配置就可以做到这一点。为例:

#config.yml
framework:
    session:
        save_path: "%kernel.root_dir%/sessions"

进一步参考文档

希望对您有所帮助

您是否处于多服务器环境中?如果是这样,我建议将会话存储在DB: http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html