Symfony 2-根据请求自定义cookie域


Symfony 2 - Per request custom cookie domain

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

framework
    session:
        cookie_domain:  "%site_domain%"

其中CCD_ 1参数为网站域。

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

因此,如果新域是integration_domain并且用户在那里登录,则cookie被设置为site_domain域。

如果用户登录到其他域

,我想在另一个域上设置cookie

我自己找到了一个解决方案,基本上,如果请求主机与我需要的主机匹配,就可以使用自定义会话保存处理程序来更改域,否则,保持原样:

<?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。如有任何帮助,我们将不胜感激。