如何在Symfony 3中使用php.ini配置的原生PHP Memcached Session?
我来帮你解决这个问题!Symfony 3 默认会接管 Session 的配置逻辑,所以哪怕你在 php.ini 里已经设置了 Memcached,它还是会默认使用自带的文件存储。不过有两种可靠的办法可以让它用上你的 Memcached Session 配置:
方法一:让 Symfony 尊重 php.ini 的原生配置
Symfony 默认会通过 handler_id 指定自己的 Session 处理器,要让它复用 php.ini 的配置,只需要把这个配置项设为 null 即可。
打开 app/config/config.yml,找到 framework 下的 session 部分,修改成这样:
framework: session: handler_id: ~ # 其他 session 配置(比如 cookie_secure、cookie_lifetime 之类的)可以保留
修改后,Symfony 就不会覆盖 php.ini 里的 session.save_handler 和 session.save_path 配置,直接沿用你已经设置好的 Memcached 配置。
方法二:在 Symfony 里直接配置 Memcached Session(更可控)
如果不想依赖 php.ini 的全局配置,或者需要更精细的自定义(比如设置 Session 前缀、过期时间),可以直接在 Symfony 中配置 Memcached Session 处理器:
- 先通过 Composer 安装依赖组件(Symfony 3 需要手动安装):
composer require symfony/memcached-session-handler
- 然后修改
app/config/config.yml的配置:
framework: session: handler_id: session.handler.memcached services: session.handler.memcached: class: Symfony\Component\HttpFoundation\Session\Storage\Handler\MemcachedSessionHandler arguments: - '@memcached' - { prefix: 'sf_session_', expiretime: 86400 } # 自定义前缀和过期时间 memcached: class: Memcached calls: - [ addServer, ['X-memcache', 11213] ] # 和你 php.ini 里的 save_path 保持一致
验证配置是否生效
配置完成后,你可以在 Symfony 项目的任意控制器中添加以下代码来验证:
dump(session_save_handler()); dump(session_save_path());
或者直接打印 phpinfo(),查看 Session 相关的配置是否已经切换为 Memcached。也可以登录 Memcached 服务器,检查是否生成了以 Session ID 为键的存储内容。
内容的提问来源于stack exchange,提问作者Thomas Decaux
相关产品推荐
相关产品推荐

