所有子域的 Symfony2 会话
Posted
技术标签:
【中文标题】所有子域的 Symfony2 会话【英文标题】:Symfony2 session for all subdomains 【发布时间】:2015-07-01 23:57:27 【问题描述】:我正在构建的网站每个用户都有一个子域。默认域是 www.acme.com,我自己的页面(例如)是 marcel.acme.com。另一个用户页面位于 johndoe.acme.com 下。现在发生以下情况: - www.acme.com 显示我已登录。 - marcel.acme.com 显示我已登录。 - johndoe.acme.com 显示我是匿名的。
在我的 config.yml 中我确实设置了
framework:
session:
cookie_domain: .acme.com
防火墙是为 ^/ 定义的,并使用 form_login (FosUserBundle) 和 oauth。两者的行为相同。
登录 www.acme.com 确实会重定向到 marcel.acme.com,所以这可能就是 marcel 和 www 都可以工作的原因,但我怎样才能让所有子域都工作?
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
login_path: /login
check_path: /login_check
oauth:
login_path: /login
failure_path: /login
check_path: /login
use_forward: false
default_target_path: /mytracker
provider: fos_userbundle
resource_owners:
facebook: /login/check-facebook
oauth_user_provider:
service: my_user_provider
anonymous: true
logout:
path: /logout
target: /
Symfony 的版本是 2.6.5
【问题讨论】:
你能从你的security.yml
分享你的防火墙配置吗?另外,您使用的是哪个版本的 Symfony?
将答案添加到我原来的帖子中!
【参考方案1】:
看来我设法解决了。在我的配置中,我添加了:
session:
cookie_lifetime: 0
save_path: %kernel.root_dir%/var/sessions
cookie_domain: .acme.com
name: SFSESSID
此外,我还增加了安全性:
remember_me:
key: "%secret%"
lifetime: 31536000
path: /
domain: .acme.com
应该不需要最后一部分,反正我想实现 remember_me 功能。感谢您的思考,也许有人对此有所帮助。
【讨论】:
对不起。我没能早点检查这个。我打算建议您设置会话name
参数,但即使这样我也不需要让它工作(我已经尝试过使用和不使用它)。此外,正如您所说,main
防火墙的remember_me
部分不应该是必需的。无论如何,很高兴你让它工作。 :)以上是关于所有子域的 Symfony2 会话的主要内容,如果未能解决你的问题,请参考以下文章