Symfony2会话跨子域共享方案

3
我正在构建的网站为每个用户设置了一个子域名。默认域名是 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 版本是哪个? - Restless
我在原帖中添加了答案! - Marcel de Hoog
1个回答

3

看来我已经解决了。在我的配置文件中,我添加了:

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

那最后一部分其实不需要,但我仍然想要实现“记住我”的功能。感谢您的思考,也许有人能从中受益。

抱歉,我之前没能及时检查这个问题。 我本来想建议你设置会话的“name”参数,但是即使没有设置,我也成功地让它工作了(我已经尝试过有和没有设置)。 另外,你说的在“main”防火墙中的“remember_me”部分应该不是必需的。无论如何,很高兴你解决了这个问题。 :) - Restless

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接