Symfony 2 - 每个请求自定义cookie域

时间:2016-01-09 20:47:31

标签: php symfony cookies

我的Symfony应用程序目前使用域名cookie域,这是为了让用户在所有子域中进行身份验证,我已使用配置进行设置:

framework
    session:
        cookie_domain:  "%site_domain%"

其中siite_domain参数是网站域。

现在我已经在另一个域下实现了另一个网站部分,我已经设置了防火墙和带有主机限制的路由,问题是即使用户正确验证了cookie也设置为旧域。

因此,如果新域名为integration_domain且用户在其中登录,则Cookie会设置为site_domain域。

我想在其他域

中的用户登录情况下在不同的域上设置cookie

1 个答案:

答案 0 :(得分:0)

我自己找到了解决方案,基本上可以使用自定义会话保存处理程序来更改域,如果请求主机符合我的需要,否则,保持不变:

<?php

use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;

/**
 * Class to save cookie for session in a different domain for gazzetta integration
 */
class DynamicDomainSessionStorage extends NativeSessionStorage
{
     /**
     * setOptions.
     *
     * {@inheritDoc}
     */
    public function setOptions(array $options)
    {

        // Set the cookie domain as the request if we're handling gazzetta session
        if(isset($_SERVER['HTTP_HOST']) && in_array($_SERVER['HTTP_HOST'], ['mycustomdomain', 'www.mycustomdomain'])) {
            $options["cookie_domain"] = $_SERVER['HTTP_HOST'];
        }

        return parent::setOptions($options);
    }
}

这是配置更改:

framework:
      session:
          storage_id: session.storage.dynamicdomain

services:
    session.storage.dynamicdomain:
        class: DynamicDomainSessionStorage

如果有人找到更好的解决方案,我会把这个开放几天

更新:我刚刚发现,如果您设置storage_id,则无法使用memcached会话处理程序,因此这是一个半修复程序,因为它不会让您使用自定义storage_handler 。任何帮助表示赞赏

相关问题