Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Symfony 2-每个请求自定义cookie域_Php_Symfony_Cookies - Fatal编程技术网

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

Php Symfony 2-每个请求自定义cookie域,php,symfony,cookies,Php,Symfony,Cookies,我的Symfony应用程序当前使用的是一个基于域的cookie域,这是为了让用户在所有子域中进行身份验证,我已使用配置设置: framework session: cookie_domain: "%site_domain%" 其中siite\u domain参数是网站域 现在,我必须在另一个域下实现另一个网站部分,我已经设置了防火墙和带有主机限制的路由,问题是,即使用户正确地验证了cookie,它也被设置为旧域 因此,如果新域是integration\u domain

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

framework
    session:
        cookie_domain:  "%site_domain%"
其中
siite\u domain
参数是网站域

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

因此,如果新域是
integration\u domain
并且用户在那里登录,那么cookie将设置为
site\u 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);
    }
}
如果有人能找到更好的解决办法,我会让这件事公开几天

更新:我刚刚发现,如果您设置了存储\u id,就不能使用memcached会话处理程序,因此这是一个半修复程序,因为它不允许您使用自定义存储\u处理程序。谢谢你的帮助

framework:
      session:
          storage_id: session.storage.dynamicdomain

services:
    session.storage.dynamicdomain:
        class: DynamicDomainSessionStorage