Ale*_*nko 2 php subdomain authorization symfony
所有!
我只是看到symfony2路由器不使用uri的主机部分.我需要将COUNTRY分隔为第三个子域,将locale分隔为路径路径中的第一个元素
http:// {country} .mysite.com/{_locale}/myaction,即
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());
}
}
Run Code Online (Sandbox Code Playgroud)
但是......问题是:如何在几个子域之间透明地实现AUTH进程一次只能进行一次?
用户通过en.mysite.com/{_ locale}/...登录
用户访问de.mysite.com/{_ locale}/...但是系统知道他(她)并且没有再次询问登录/密码凭据
有人帮帮我吗?谢谢你提前!认证高级Oracle开发人员/ DBA
igo*_*orw 15
您可以通过设置正确的cookie域轻松完成此操作.这样,所有子域都可以访问标识用户会话的cookie.
你想要做的是将你的cookie域设置为:( .mysite.com是的,开头的一个点).
为此,请在config.yml文件中设置以下配置:
framework:
session:
cookie_domain: .mysite.com
Run Code Online (Sandbox Code Playgroud)
注意:如果您使用的是安全组件中的remember_me,则可能需要在remember_me防火墙部分设置域.
附录:在Symfony 2.0中,相关设置为"域名".它在2.1中被弃用.
| 归档时间: |
|
| 查看次数: |
3440 次 |
| 最近记录: |