所有!
我只是看到symfony2路由器不使用uri的主机部分。 我需要将COUNTRY分隔为第三个子域,将locale分隔为路径路径中的第一个元素
http:// {country} .mysite.com / {_locale} / myaction,ie。
en.mysite.com/en/action ---英国公司&英语
de.mysite.com/ru/action --- deutschland公司&俄语
ru.mysite.com/uk/action ---俄罗斯公司&乌克兰语
问题通过以下服务解决:
-- config.yml
services:
kernel.listener.subdomain_listener:
class: Acme\DemoBundle\Listener\SubdomainListener
tags:
- { name: kernel.event_listener, event: kernel.request, method: onDomainParse }
-- SubdomainListener.php
<?php
namespace Acme\DemoBundle\Listener;
use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\Event;
class SubdomainListener
{
public function onDomainParse(Event $event)
{
$request = $event->getRequest();
$session = $request->getSession();
// todo: parsing subdomain to detect country
$session->set('subdomain', $request->getHost());
}
}
但......问题是: 如何在几个子域之间实现AUTH过程是可能的(正确的) 透明只有一次??
用户通过en.mysite.com / {_ locale} / ...
用户访问de.mysite.com / {_ locale} / ...但是系统知道他(她)并且没有再次询问登录/密码凭证
有人帮助我吗? 谢谢你提前! 认证高级Oracle开发人员/ DBA
答案 0 :(得分:15)
您可以通过设置正确的Cookie域轻松完成此操作。这样,所有子域都可以访问标识用户会话的cookie。
您要做的是将您的Cookie域设置为:.mysite.com
(是的,开头的一个点)。
为此,请在config.yml
文件中设置以下配置:
framework:
session:
cookie_domain: .mysite.com
注意:如果您使用安全组件中的remember_me,则可能需要在remember_me
section of your firewall上设置域。
附录:在Symfony 2.0中,相关设置为“域名”。它在2.1中被弃用。