You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止同一服务器上两个Apache别名的Symfony项目共享会话?

解决同一域名下Symfony别名项目共享会话的问题

问题根源是两个项目处于同一域名下,默认使用相同的会话Cookie名称(PHPSESSID)和RememberMe Cookie名称,导致浏览器会将同一份会话数据传递给两个项目,进而共享登录状态。结合你提到的两个项目环境变量不同的条件,可通过以下配置实现会话隔离:

1. 配置独立的会话Cookie参数

修改每个项目的config/packages/framework.yaml,通过环境变量指定专属的会话Cookie名称和路径:

framework:
    session:
        cookie_name: '%env(SESSION_COOKIE_NAME)%'
        cookie_path: '%env(SESSION_COOKIE_PATH)%'
        httponly: true
        # 根据实际部署环境调整secure参数,生产环境建议设为true
        secure: false

在每个项目的.env文件中设置对应的环境变量:

  • test1的.env:
SESSION_COOKIE_NAME=TEST1_SESSID
SESSION_COOKIE_PATH=/test1
  • test2的.env:
SESSION_COOKIE_NAME=TEST2_SESSID
SESSION_COOKIE_PATH=/test2

2. 配置独立的RememberMe Cookie参数

修改config/packages/security.yaml中的remember_me配置,同样通过环境变量区分Cookie名称和路径:

security:
    # ... 其他已有的配置
    firewalls:
        main:
            # ... 其他已有的配置
            remember_me:
                secret: '%kernel.secret%'
                lifetime: 604800
                name: '%env(REMEMBER_ME_COOKIE_NAME)%'
                path: '%env(SESSION_COOKIE_PATH)%'

在每个项目的.env中添加RememberMe的Cookie名称:

  • test1的.env:
REMEMBER_ME_COOKIE_NAME=TEST1_REMEMBER_ME
  • test2的.env:
REMEMBER_ME_COOKIE_NAME=TEST2_REMEMBER_ME

3. 确认kernel.secret独立

确保两个项目的.env中APP_SECRET(即kernel.secret)不同,这是Symfony加密会话数据和RememberMe令牌的关键,避免出现跨项目解密的可能。

生效验证

完成配置后,清理浏览器的缓存和旧Cookie,分别登录test1和test2,即可验证两个项目的登录状态已完全隔离,注销操作也不会互相影响。

内容的提问来源于stack exchange,提问作者Elikill58

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 18:47:08