Symfony 3:如何在子域上共享cookie?

时间:2016-10-19 07:28:30

标签: symfony cookies setcookie

我的网站中有两个以上的子域名。 例如:www.example.com,login.example.com,user.example.com,cart.example.com ...... 我在config.yml和php.ini中设置了cookie_domain是.example.com 当我setCookies('test','value','。example.com'),但cookie总是不在子域中共享。 那么,现在该怎么办?

有我的config.yml

session:
    handler_id:  session.handler.native_file
    save_path:   "%kernel.root_dir%/../var/sessions/"
    cookie_domain: .example.com
    cookie_lifetime: 0
    name: TESTSESSIONID

在我的安全中:

security:
    session_fixation_strategy:  none

3 个答案:

答案 0 :(得分:1)

您可以在定义cookie_domainconfig.yml中配置会话密钥。例如:

config.yml

session:
    cookie_lifetime: 0
    save_path: %kernel.root_dir%/var/sessions
    cookie_domain: .my-domain.com
    name: SFSESSID

希望这个帮助

答案 1 :(得分:1)

我需要这个适用于所有子域名,但域名本身会根据我是在开发还是在生产中而改变。

我使用parameters_dev.yml和parameters.yml来定义'域',然后在config.yml中添加它以允许所有子域中的cookie。

framework:
session:
    cookie_domain: '.%domain%'

答案 2 :(得分:0)

您需要在应用程序中设置可信主机,因为出于安全原因,symfony应用程序将响应列入白名单的主机和子主机。要做到这一点,你有几种方法来解决它

  1. 在你的config.yml中设置trusted_hosts,如下所示
  2. #app/config/config.yml
    framework:
        trusted_hosts:  ['example.com', 'login.example.com', 'user.example.com', 'cart.example.com']
    
    1. 您还可以使用下面的Request :: setTrustedHosts()方法在前端控制器中设置可信主机。
    2. //web/app.php 
      Request::setTrustedHosts(array('.*\.?example.com$'));
      

      请参阅以下文档链接以供参考

      reference 1

      reference 2

      reference 3