Yii2 多域名跨域同步登录退出

在平台开发过程中,项目分为前台(frontend)www.xxx.com和后台(backend) yun.xxx.com两部分,绑定两个域名, 我们知道在没有绑定域名的时候前后台可以同步登录和退出,但是绑定域名后就失效了,原因是session的作用域不同了。 两个域名的session作用域都只限制在了自己的域名上,我们的解决办法是将不同二级域名的作用域都改成顶级域名xxx.com。 以下部分代码来自网络收集。

在common/config/main.php里面增加如下代码:

//跨域session域名配置,获取当前主机名
$host_array = explode(‘.‘, $_SERVER["HTTP_HOST"]);
//针对com域名,获取顶级域名
if (count($host_array) == 3) {
    define(‘DOMAIN‘, $host_array[1] . ‘.‘ . $host_array[2]);
}
//针对com.cn域名
elseif (count($host_array) == 4) {
    define(‘DOMAIN‘, $host_array[1] . ‘.‘ . $host_array[2]. ‘.‘ . $host_array[3]);
}
else{
    //echo "本系统不支持本地访问,请配置域名";exit;
}
define(‘DOMAIN_HOME‘, ‘www.‘ . DOMAIN);
define(‘DOMAIN_YUN‘, ‘yun.‘ . DOMAIN);
define(‘DOMAIN_API‘, ‘api.‘ . DOMAIN);
define(‘DOMAIN_EMAIL‘, ‘mail.‘ . DOMAIN);
define(‘DOMAIN_IMG‘, ‘img.‘ . DOMAIN);

修改components部分,改变session作用域

        ‘user‘ => [
            ‘identityClass‘ => ‘common\models\User‘,
            ‘enableAutoLogin‘ => true,
            ‘identityCookie‘ => [‘name‘ => ‘_identity‘, ‘httpOnly‘ => true, ‘domain‘ => ‘.‘ . DOMAIN],
        ],
        ‘session‘ => [
            ‘cookieParams‘ => [‘domain‘ => ‘.‘ . DOMAIN, ‘lifetime‘ => 0],
            ‘timeout‘ => 3600,
        ],

通过上述配置后,多个二级域名间就可以实现同步登录和退出了。

原文链接:http://www.getyii.com/topic/216

时间: 2024-10-27 05:55:33

Yii2 多域名跨域同步登录退出的相关文章

Cookie同域,跨域单点登录(转)

Cookie 同域单点登录 最近在做一个单点登录的系统整合项目,之前我们使用控件实现单点登录(以后可以介绍一下).但现在为了满足客户需求,在不使用控件情况下实现单点登录,先来介绍一下单点登录. 单点登录:多个不同系统整合到统一加载个平台,用户在任何一个系统登录后,可以访问这个统一加载上的所有系统.登录之后,用户的权限和信息不再受某个系统的限制,即使某个系统出现故障(包括统一加载平台),其他系统还是能正常使用的.这就需要用户权限等信息保存到客户端,不受服务器的限制. 在cookie相关文档信息中,

跨域单点登录系统的设计与实现

跨域单点登录系统的设计与实现 一.跨域单点登录系统整体设计 1. 系统架构 如上图所示:在系统存在一个认证中心以及多个站点.用户信息统一由认证中心管理,在其它子站的登录均会跳转到认证中心来登录. 2. 工作流程 单点登录系统的关键在于,当用户从一个子站登录后,它会在认证中心生成ticket标识,只要该标识存在就代表用户已经成功登陆了.每个子站在进入之前,无论本地ticket标识是否存在,均会去请求一次认证中心,要做的事情如下:如果子站ticket不存在,并不一定代表用户没有从别的子站登录,但是如

使用Cookie实现跨域单点登录的原理

对于构建分布式系统来说业务功能的物理部署会随着新的业务模块的增加而增加或改变物理部署的位置.而每个用户都有统一的帐号作为我们登录系统时的一个认证.当应用程序部署在不同的物理机上,我们去访问不同的业务功能时,需要再次登录并记录每个业务对应的用户名和密码,这样会造成很大的麻烦,耽误工作效率,浪费很多时间.这种情况如果我们不引入CAS单点跨域登录原理,影响信息化给我们带来的便捷性和高效性,也会影响一定的用户体验. CAS跨域单点登录原理实现思想如下图更能清晰的描绘出来,我们来看看吧!

asp.net 跨域单点登录 【转】

关键字:单点登录   跨域    跨域单点登录 源代码下载:http://download.csdn.net/source/1571879 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. asp.net跨域单点登录分为: 1.跨子域单点登录.如 blog.a.com 和 info.a.com 这2个站点同属一个主域.a.com,实现跨子域单点登录很简单,可以

关于跨域问题(包括端口和域名跨域)

关于跨域问题(包括端口和域名跨域) 1.C#语言跨域 我估计任何语言在返回头加这个都可以解决跨域问题 //完全跨域设置 包括跨域名和端口 HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*"); //跨域名 HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", &qu

在ExpressJS中设置二级域名跨域共享Cookie

问题:我使用expressjs和mongostore来管理session.下面是expressjs中的设置. app.configure(function(){ app.use(express.session({ secret: conf.secret, maxAge: new Date(Date.now() + 3600000), cookie: { path: ‘/‘ }, store: new MongoStore(conf.db) })); }); 我已经在上面设置了cookie路径.但

asp.net 真正实现完全跨域单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. asp.net跨域单点登录分为: 1.跨子域单点登录.如 blog.a.com 和 info.a.com 这2个站点同属一个主域.a.com,实现跨子域单点登录很简单,可以利用cookie,设置Domain为”.a.com'即可,这里就不再赘叙. 2.完成跨域单点登录.如 www.a.com www.b.com

nginx 多域名跨域

当浏览器发起ajax请求到其他域名时,会出现跨域的问题,在nginx上的解决方案是配置Access-Control-Allow-Origin来解决,此参数只允许配置单个域名或者*,当我们需要允许多个域名跨域访问时却不好配置,可以用map来实现 map $http_origin $corsHost { default 0; "~http://www.123admin.com" http://www.123admin.com; "~http://m.123admin.com&qu

经实测解决Access-Control-Allow-Origin多域名跨域问题

网上流传2种方法解决多域名跨域问题:1.Access-Control-Allow-Origin:[域名一],[域名二]: 2.用$_SERVER("HTTP_ORIGIN")获取来源地址,判断该域名是否属于允许跨域的域名数组,如果是则设置:Access-Control-Allow-Origin:$_SERVER("HTTP_ORIGIN"). 经实测第一种方法完全无效,第二种方法$_SERVER("HTTP_ORIGIN")并不总能获取来源地址,