1.首先准备两个虚拟域名

127.0.0.1  www.openpoor.com

127.0.0.1  www.myspace.com

2.在openpoor的根目录下创建以下文件

index.php文件

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>sync login</title>
</head>
<body> <?php if(empty($_SESSION['username'])):?>
hello,游客;请先<a href="login.php">登录</a><a href="http://www.myspace.com/index.php">进入空间</a>
<?php else: ?>
hello,<?php echo $_SESSION['username']; ?>;<a href="http://www.myspace.com/index.php">进入空间</a>
<?php endif; ?>
<a href="http://www.openpoor.com/index.php">home</a>
</body>
</html>

login.php文件

<?php
session_start();
if(!empty($_POST['username'])){
require '../Des.php';
$_SESSION['username'] = $_POST['username'];
$redirect = 'http://www.openpoor.com/index.php';
header('Location:http://www.openpoor.com/sync.php?redirect='.urlencode($redirect).'&code='.Des::encrypt($_POST['username'],'openpoor'));exit;
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<title>sync login</title>
</head>
<body>
<form action="" method="post">
<input type="text" name="username" placeholder="用户名"/>
<input type="text" name="password" placeholder="密码"/>
<input type="submit" value="登录"/>
</form>
</body>
</html>

sync.php文件

<?php
$redirect = empty($_GET['redirect']) ? 'www.openpoor.com' : $_GET['redirect'];
if(empty($_GET['code'])){
header('Loaction:http://'.urldecode($redirect));
exit;
} $apps = array(
'www.myspace.com/slogin.php'
);
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8"/>
<?php foreach($apps as $v): ?>
<script type="text/javascript" src="http://<?php echo $v.'?code='.$_GET['code'] ?>"></script>
<?php endforeach; ?>
<title>passport</title>
</head>
<body>
<script type="text/javascript">
window.onload=function(){
location.replace('<?php echo $redirect; ?>');
}
</script>
</body>
</html>

3.在myspace的根目录下创建如下文件

slogin文件 完成session的设置

<?php
session_start();
header('Content-Type:text/javascript; charset=utf-8');
if(!empty($_GET['code'])){
require '../Des.php';
$username = Des::decrypt($_GET['code'],'openpoor');
if(!empty($username)){
header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
$_SESSION['username'] = $username;
}
}
?>

index.php

<?php
session_start();
if(!empty($_SESSION['username']))
{
echo "欢迎来到".$_SESSION['username']."的空间";
}else{
echo "请先登录";
}
?>

4.Des.php的文件内容如下

<?php
/**
*@see Yii CSecurityManager;
*/
class Des{ public static function encrypt($data,$key){
$module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,'');
$key=substr(md5($key),0,mcrypt_enc_get_key_size($module));
srand();
$iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($module), MCRYPT_RAND);
mcrypt_generic_init($module,$key,$iv);
$encrypted=$iv.mcrypt_generic($module,$data);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
return md5($data).'_'.base64_encode($encrypted);
} public static function decrypt($data,$key){
$_data = explode('_',$data,2);
if(count($_data)<2){
return false;
}
$data = base64_decode($_data[1]);
$module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,'');
$key=substr(md5($key),0,mcrypt_enc_get_key_size($module));
$ivSize=mcrypt_enc_get_iv_size($module);
$iv=substr($data,0,$ivSize);
mcrypt_generic_init($module,$key,$iv);
$decrypted=mdecrypt_generic($module,substr($data,$ivSize,strlen($data)));
mcrypt_generic_deinit($module);
mcrypt_module_close($module);
$decrypted = rtrim($decrypted,"\0");
if($_data[0]!=md5($decrypted)){
return false;
}
return $decrypted;
} }
?>

当在openpoor登录后将session信息传到其他域名下的文件下进行处理,以script标签包含的形式进行运行。

5.此时访问www.openpoor.com和www.myspace.com都是未登录状态

登录后两个域名下都是登录状态

到此我们实现了一个简单的单点登录。

https://mp.weixin.qq.com/s/4h_SA1TUR7hJWO1MSS2jtg

最新文章

  1. [转载]利用@media screen实现网页布局的自适应,@media screen and
  2. 8 ways rich people view the world differently than the average person
  3. 转:最简单的视频网站(JavaEE+FFmpeg)
  4. 20145222黄亚奇《Java程序设计》第5周学习总结
  5. js各类共用方法
  6. web跳转到自己的app
  7. check cable connection PXE-M0F: Exiting intel PXE ROM no bootable device-- insert boot disk and pre
  8. POSTMAN-REST Client
  9. 防反编译的加壳工具-Virbox Protector
  10. python3 变量理解 解释器理解 常量理解 用户交互理解 逻辑运算
  11. MySQL建表 TIMESTAMP 类型字段问题
  12. Java程序员必须掌握的常用Linux命令。
  13. Oracle&#160;修改SYS、system用户密码
  14. Hibernate一级缓存(补)
  15. How to install WP 8.0 SDK if WP 8.1 SDK is installed?
  16. 计算机顶级会议Rankings &amp;amp;&amp;amp; 英文投稿的一点经验
  17. LeetCode: Rotate List 解题报告
  18. StarRTC , AndroidThings , 树莓派小车,公网环境,视频遥控(二)小车端
  19. Gym - 101908G 二分答案+最大流
  20. jQuery Lazy Load图片懒加载

热门文章

  1. css之页面三列布局之左右两边宽度固定,中间自适应
  2. Hibernate-HQL-Criteria-查询优化
  3. MAC中怎么安装python
  4. TZ_15Spring-Cloud_Eureka-Ribbon-Hystix-Feign-Zuul微服务整合
  5. git图形化
  6. springmvc 使用poi解析excel并通过hibernate连续插入多条数据 实际数据库只能保存最后一条
  7. JSP/FTL 中获取param、request、session、application中的值
  8. easyui combobox下拉框中显示大于号小于号的问题
  9. JS Ajax跨域访问
  10. Liferay 7:Liferay Nexus