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信息了
以上是基本的原理,在各个页面作下验证判断就可以直接用了,一般域名少的,
足够使用,一般也不会太多的域名

 

 

 

原文地址:https://www.cnblogs.com/lin3615/p/5399073.html