Php Symfony 2-每个请求自定义cookie域
我的Symfony应用程序当前使用的是一个基于域的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
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