多个业务系统后台单点登录打通的实现

公司的业务后台系统, 快十来个了。

每个系统的后台管理员表都不一样,拥有的权限也不一样。

不是每个后台管理员都能登录全部系统的。有的能登录一、两个,有的能登录七、八个。

现在要解决的问题是,如何从一个登录进入,让其能在他拥有帐号的其他系统中免登录呢?

我是这么解决的。

1.统一用户名,用户名一定是唯一的。
2.另建一个数据库,有三张表。表前缀略。
User表,字段:uid,username,password,status,
User_website表, 字段 uid,wid
Website表,字段 wid,sitename,siteurl,sitedomain,dbname,tablename
dbname记录该站点的数据库名,tablename记录该站点的管理员用户表名。备用。

有了这三张表,就可以设置
添加,编辑用户,
设置他们可允许访问的站点,
各站点情况。

用户登录后,跳转到,允许站点的列表页面,再可以任意点击一个,直接进入该站点后台首页。

用户登录后,设置
setcookie(‘username‘,$username,time()+3600,‘/‘,);

跳转到 站点列表页。
在此页面,页面名:indexall.html,写javascript
访问各个相关站点去setcookie. (关键是这里!)

ThinkPHP框架,
关键代码:

{volist name="website" id="vo"}
<script type="text/javascript" src="http://{$vo.sitedomain}/admin/login/setcookie?ticket={$username}"></script>
{/volist}

website,是由控制器传过来的数组变量。
主要代码是:
// 多个后台 传送门

    public function indexall(){
        $username = cookie(‘username‘);
        if(!$username){
            return $this->error(‘請先登錄!‘,‘admin/loginall/login‘);
        }
        $cg_user_uid = cookie(‘cg_user_uid‘);
        $this->assign(‘username‘,$username);
        $db_cg_user     = Db::connect(‘db_cg_user‘);
        $website = $db_cg_user->name(‘User_website‘)->alias(‘uw‘)
            ->join(‘cg_website w‘,‘uw.wid=w.wid‘,‘left‘)
            ->where(‘uw.uid‘,$cg_user_uid)->where(‘w.dev‘,0)->select();
        $this->setMeta(‘总後臺‘);
        $this->assign(‘website‘,$website);
        $this->assign(‘uid‘,$website[0][‘uid‘]);
        return $this->fetch(‘loginall/indexall‘);
    }

因为项目数据库所在服务器与这个通用的用户表不在同一个服务器,所以有
Db::connect(‘db_cg_user‘); 这样的写法。
如果你的放在同一个数据库,就不用这么写,可以用model.

另一部分,是在其他域都要写,setcookie方法。
下面是其他域的方法:
你根据你们的实现情况写。

class Login extends Admin
{
    // 远程清设置cookie
    public function setcookie(){
        $ticket = $_GET[‘ticket‘];
        setcookie("username",$ticket,time() + 3600, ‘/‘);
        Cookie(‘ticket‘, $ticket);
        $user = mAdminuser::where(‘username‘,$ticket)->find();
        $mAdminuser = new mAdminuser;
        $mAdminuser->autoLogin($user);
    }

    // 远程清除cookie
    public function unsetcookie(){
        Cookie::clear();
        Session::clear();
    }
}

上面的autoLogin方法写在model中。

 /**
     * 更新管理员登录信息
     * @param integer $user 管理员信息数组
     */

    public function autoLogin($user){
        /* 更新登录信息 */
        $data = array(
            ‘uid‘            =>  $user[‘uid‘],
            ‘login‘             =>  array(‘exp‘,‘`login`+1‘),
            ‘last_login_time‘     =>  time(),
            ‘last_login_ip‘       =>  getIp(),
        );

        $map[‘uid‘] = $user[‘uid‘];
        $this->where($map)->update($data);
        $user = $this->where($map)->find();

        /* 记录登录的SESSION和COOKIE */
        $auth = array(
            ‘uid‘            => $user[‘uid‘],
            ‘username‘          => $user[‘username‘],
            ‘last_login_time‘   => $user[‘last_login_time‘],
        );
        session(‘uid‘,$user[‘uid‘]);
        session(‘roleid‘,$user[‘roleid‘]);
        session(‘username‘,$user[‘username‘]);
        session(‘lock_screen‘,0);
        cookie(‘admin_username‘,$user[‘username‘]);
        cookie(‘uid‘,$user[‘uid‘]);
        cookie(‘admin_email‘,$user[‘email‘]);
        session(‘user_auth‘, $auth);
        session(‘user_auth_sign‘, data_auth_sign($auth));
    }

这样就好了!

登出时,也是一样。点一键登出(这个链接做到站点列表页面右上角即可)。则通过一个过渡页面。
十秒后跳回一键登录页面。在此时间前,
js 方法,访问到,其他域清除cookie,session.

主要是理解逻辑,不能照抄的。关键在于传递cookie。

如还有疑问,欢迎加入 PHP技术问答群 提问交流, 让我们互相帮助,共同成长!

如果你已经高人,又愿意帮助他人。更热烈欢迎加入!

QQ群号:292626152

原文地址:http://blog.51cto.com/phpervip/2160904

时间: 2024-08-29 07:55:21

多个业务系统后台单点登录打通的实现的相关文章

从其它系统登录到SharePoint 2010系统的单点登录

从其它系统登录到SharePoint 2010系统的单点登录 分类: sharepoint2010 2014-03-18 16:28 68人阅读 评论(0) 收藏 举报 转:http://www.tuicool.com/articles/i22Ibu 以前做的只是使用SharePoint的单一登录,用SharePoint去登录其他的系统,现在要反过来,用Form认证的系统来登录SharePoint. 我们都知道,SharePoint使用的是域认证系统,登录到SharePoint系统上,用户必须要

多系统实现单点登录方案:SSO 单点登录

一.什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验证后,再访问其他应用中的受保护资源时,不再需要重新登录验证. 二.单点登录解决了什么问题 解决了用户只需要登录一次就可以访问所有相互信任的应用系统,而不用重复登录. 三.单点登录的技术实现机制 如下图所示: 认证后返回给应用系统而不是用户 注(图片所述存在的问题):单点登录对用户而言是透明的,它 只是保证子系统之间是相

石化盈科单点登录系统代码分析和总结

由于盈科没有成型的单点登陆系统,目前的现状是需要和阿里的edas系统实现单点登录的功能 .由于业务需要,在阿里巴巴的技术支持下,由我负责改装了阿里提供的雏形样式,实现了盈科自己的单点登陆系统.在这个改版过程中,深深的感觉到自己知识的欠缺,特别是阿里的一些加密和开源架构的使用,让我在这个过程中受益匪浅. 现在把这个过程做一个分析和总结: 1.不跨域SSO-初始登陆 上图的序号的内容如下: 1.浏览器初次访问应用url 2.无session/cookie,重定向到SSO Server登陆url,并且

B/S系统间跨域单点登录设计思路

基于B/S系统间单点登录 此处说的单点登录的概念,即不同系统公用一个登录界面.一处系统通过登录验证,在接入的各系统均为登录状态.一般有两种情景: 1)  一级域名相同 例如:tieba.baidu.com 和 www.baidu.com 这种情形的解决方案,非常简单.就是在统一登录页面登录成功以后,将用户的token(共享的session)信息存在cookie里,且cookie的作用域设为一级域名,例如设为baidu.com.这样同一个浏览器就实现了用户登录信息的共享. 2)  一级域名不相同

这样的单点登录才最有效果,很多大咖牛人都不知道!

导读:单点登录,是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.本文从友户通单点登录类型.认证安全以及应用集成的角度,聊下解决复杂场景下的单点登录方案.随着云计算的飞速发展,越来越多的云应用.云服务充斥在日常的工作当中.人们在享受信息化带来的便捷的同时,也遭受着应用系统反复登录,工作入口来回切换,数据消息接收不及时等诸多烦恼.伴随着业务系统数量的增加,用户会觉得自己身陷于越来越多的用户账号和密码需要记录,以便于使用各种云服务.单点登录(Single Sign On),简

单点登录(SSO)工作原理

单点登录(SSO)工作原理 一.单点登录的介绍 单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一.SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 例如:百度旗下有很多的产品,比如百度贴吧.百度知道.百度文库等,只要登录百度账号,在任何一个地方都是已登录状态,不需要重新登录. 当用户第一次访问应用系统的时候,因为还没有登录,会被引导到认证系统中进行登录:根据用户提供的登录信息,认证系统进行身份校验,如果通过校

统一协同工作平台用户管理、单点登录以及任务集成接口说明

目录 1 概述 西北油田分公司信息化经过长期建设,在各个业务点上,逐步搭建了适应业务管理的信息化系统,为分公司经营管理提供了强大的信息化辅助管理支撑. 但是,分公司前期建设的信息化系统都是基于传统办公自动化OA,目前逐步形成了多个单独业务系统组成的OA,如公文.合同.招投标.预结算等系统,这些系统之间没有统一的技术和数据标准,数据不能自动传递和共享,流程控制和标准多样化,从而形成了一个个彼此隔离的信息孤岛. 在此背景上,西北油田分公司搭建了一套整合分公司各种信息资源库的协同工作平台,形成统一.综

SharePoint 2010 单点登录

SharePoint2010单点登录 1.进入管理中心>应用程序管理 2.找到  Secure Store Service 应用程序代理 3.然后就是新建了 5.输入网站集管理员 6.这个时候SharePoint就知道你需要给OA这个系统做单点登录了. 7.下一步就是我们要把我们进OA系统的帐号密码告诉SharePoint,让他记住当前登录域账户所存的OA账户. 8.下面我们模拟一下OA系统登录页面 <html><body><form id=form1 action='

单点登录与消息队列以及在J2EE中的实现方案

前言 这次为大家简单介绍两个在WEB开发中经常使用的概念——单点登录和消息队列以及具体到J2EE中的一些实现方案.本文原创性的工作比较少,主要是一些总结概括和自己的理解. 单点登录SSO SSO的业务场景 所谓单点登录就是在一个站点登录之后可以授信给其他站点,这样就可以做到一次登录,到处操作.单点登录的实质就是安全上下文(Security Context)或凭证(Credential)在多个应用系统之间的传递或共享. 大部分的网站采用Cookie作为登录的一种简单实现方案,在同一个一级域名下面,