我的Symfony应用程序目前使用域cookie域,这是为了让用户在所有子域中进行身份验证,我已经用config:设置了这一点
framework
session:
cookie_domain: "%site_domain%"
其中CCD_ 1参数为网站域。
现在我必须在另一个域下实现另一个网站部分,我设置了防火墙和带有主机限制的路由,问题是即使用户正确验证了cookie,也会将其设置为旧域。
因此,如果新域是integration_domain
并且用户在那里登录,则cookie被设置为site_domain
域。
如果用户登录到其他域
我自己找到了一个解决方案,基本上,如果请求主机与我需要的主机匹配,就可以使用自定义会话保存处理程序来更改域,否则,保持原样:
<?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。如有任何帮助,我们将不胜感激。