zoukankan      html  css  js  c++  java
  • SSO单点登陆

    一句话,就是能让各个不同的域名带回相同的认证信息即可。
    实现方法,就是把其中一个登陆后,把认证的信息分别保存在不同域名下的 cookie,
    当在验证是否登陆时,验证 cookie,如果是子域名,这个则直接用 cookie设置作用域为顶级即可。
    以下说的是不同的域名,其中是用了 script 的功能,分别去访问各个页面,如域名:
    www.a.com
    www.b.com
    www.c.com
    各个域名下放一个 index.php文件,作为验证用,
    index.php测试代码如下:

    <?php
    print_r($_COOKIE);
    //这里解析 cookie中的信息,如果验证通过,则生成 cookie写到相应的域名下
    ?>
    

    假设统一的登陆的页面是
    www.c.com/login.php,www.c.com/do.php先作前端验证,如果正确,则允许提交
    login.php 代码如下

    <?php
    session_start();
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8"/>
    <title>sync login</title>
    <script src="jquery-1.8.3.min.js" type="text/javascript"></script>
    </head>
    <body>
    <form action="http://www.c.com/do.php" method="post">
      <input type="text" name="username" placeholder="用户名"/>
      <input type="text" name="password" placeholder="密码"/>
      <input type="submit" value="登录"/>
    </form>
    <script>
    $(document).ready(function(){
    	$("input[name='username']").click(function(){
    		var username = $("input[name='username']").val();
    		var password = $("input[name='password']").val();
    		var url ="do.php";
    		$.post(url,{code:name},function(data){
    			if(data.error==false)
    			{
    				return true;
    			}else
    			{
    				alert(data.message);
    				return false;
    			}
    		},'json');
    	});
    });
    </script>
    </body>
    </html>
    

     do.php代码如下:

    <?php
    $redirect = empty($_REQUEST['redirect']) ? 'http://www.a.com' : $_REQUEST['redirect'];
    if(empty($_REQUEST['username']) || empty($_REQUEST['password'])){  
      header('Loaction:http://'.urldecode($redirect));
      exit;
    }
    $urls = array(
      'www.a.com/a.php',
      'www.b.com/a.php',
      'www.c.com/a.php'
    );
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8"/>
    <?php foreach($urls as $url){?>
    <script type="text/javascript" src="http://<?php echo $url.'?code='.$_REQUEST['code'] ?>"></script>
    <?php } ?>
    <title>登陆验证</title>
    </head>
    <body>
    <script type="text/javascript">
    window.onload=function(){
      location.replace('<?php echo $redirect; ?>');
    }
    </script>
    </body>
    </html>
    

     

    这样,直接访问 www.a.com/www.b.com/www.c.com就可以获取到 cookie信息了
    以上是基本的原理,在各个页面作下验证判断就可以直接用了,一般域名少的,
    足够使用,一般也不会太多的域名

     

     

     

  • 相关阅读:
    【原】基础篇:第一篇,本节主要向大家介绍Ext的最基础的话题
    【原】基础篇:第七篇,Ext组件系列之label组件的基本用法
    【原】基础篇:第三篇,常用的一些Ext方法
    框架
    【原】基础篇:第六篇,Ext组件系列之button组件的基本用法
    序列化
    【原】基础篇:第四篇,Ext中有两个很重要的方法,一个是decode;一个是encode.
    Arrays.asList详解
    JSP页面导出CSV查询结果
    Log的重要性
  • 原文地址:https://www.cnblogs.com/lin3615/p/5399073.html
Copyright © 2011-2022 走看看