Symfony2 会话和缓存:清除命令
Posted
技术标签:
【中文标题】Symfony2 会话和缓存:清除命令【英文标题】:Symfony2 session and cache:clear command 【发布时间】:2015-09-27 12:12:35 【问题描述】:我使用 Symfony 会话来存储和检索用户在启动页面上选择的语言。如果他们没有设置语言,他们将直接重定向到启动画面。此行为按预期工作。
不幸的是,当我清除缓存时遇到了问题(我使用php app/console cache:clear --env=prod
命令)。用户可以访问一个页面,然后在任何单击时将他们重定向到启动画面。之后,即使他们选择了一种语言,他们也无法进入首页,任何点击都会再次重定向到启动页面。
如果我手动删除缓存文件夹,则不会发生错误。
我的会话相关配置如下:
framework:
session:
handler_id: ~
gc_probability: 0
我的缓存目录中没有会话文件夹。 我可以在我的站点 tmp 文件夹中找到我的会话文件(会话 ID 和内容与用户会话 cookie 和语言选择相匹配)。它们在 cache:clear 命令后被保留,但似乎 Symfony 无法再从这些文件中获取值。此外,没有为这些用户创建新的会话文件,而且似乎无法在任何地方编写新的语言选择。
我的本地开发环境(改进的 Homestead)没有错误,但我所有其他环境(开发、登台、生产)都有错误
使用 $session->invalidate();在启动页面上将解决问题。但我想了解它为什么会发生。有什么想法吗?
【问题讨论】:
为什么将gc_probability
设置为 0 ?我想你会覆盖 session.save_path
吗?如果您在配置未更改的环境检查之间有不同的行为
老实说,我不知道 gc_probability 因为我自己没有开始这个项目。将删除该设置以使用默认设置。
session.save_path
在 Symfony 配置和任何捆绑软件中都不会被覆盖。因此,这应该默认为%kernel.cache.dir%/sessions
,但这不是发生的情况,它们存储在 tmp 文件夹中。 php session.save_path
的值设置为/srv/www/my_domain/var/tmp
,它是写入会话文件的位置。
【参考方案1】:
您是否处于多服务器环境中?如果是这样,我建议将会话存储在数据库中:http://symfony.com/doc/current/cookbook/configuration/pdo_session_storage.html
【讨论】:
不,这是单服务器环境。【参考方案2】:您可以更改 Symfony 保存会话数据的目录,以便在清除缓存时会话保持活动状态。您只需更改框架配置即可执行此操作。 例如:
#config.yml
framework:
session:
save_path: "%kernel.root_dir%/sessions"
doc中的进一步参考
希望有帮助
【讨论】:
会话文件似乎存储在/srv/www/my_domain/var/tmp
所以在缓存文件夹之外。我在整个缓存目录中看不到任何相关的会话文件。 Symfony 中的 session.save_path 会覆盖 php.ini 的值吗?
仅适用于 Symfony3。问题是关于 Symfony2(哪些会话在 app/cache/以上是关于Symfony2 会话和缓存:清除命令的主要内容,如果未能解决你的问题,请参考以下文章