我的Symfony应用程序目前使用域名cookie域,这是为了让用户在所有子域中进行身份验证,我已使用配置进行设置:
framework
session:
cookie_domain: "%site_domain%"
其中siite_domain
参数是网站域。
现在我已经在另一个域下实现了另一个网站部分,我已经设置了防火墙和带有主机限制的路由,问题是即使用户正确验证了cookie也设置为旧域。
因此,如果新域名为integration_domain
且用户在其中登录,则Cookie会设置为site_domain
域。
我想在其他域
中的用户登录情况下在不同的域上设置cookie答案 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 。任何帮助表示赞赏