php实现单点登录实例
2017-05-25 10:13
253 查看
1.准备两个虚拟域名
127.0.0.1 www.a.com
127.0.0.1 www.b.com
2.在a的根目录下创建以下文件
3.在www.b.com的根目录下创建如下文件
4.此时访问www.a.com和www.b.com都是未登录状态
登录后两个域名下都是登录状态
到此我们实现了一个简单的单点登录。
done!
127.0.0.1 www.a.com
127.0.0.1 www.b.com
2.在a的根目录下创建以下文件
//index.php <?php session_start(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>sync login</title> </head> <body> <?php if(empty($_SESSION['username'])):?> <p>hello,游客;请先<a href="login.php">登录</a></p> <p><a href="http://www.b.com/index.php">进入空间</a></p> <?php else: ?> <p>hello,<?php echo $_SESSION['username']; ?>;<a href="http://www.b.com/index.php">进入空间</a></p> <?php endif; ?> <a href="http://www.a.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.a.com/index.php'; header('Location:http://www.a.com/sync.php?redirect='.urlencode($redirect).'&code='.Des::encode($_POST['username'],'a')); 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.a.com' : $_GET['redirect']; if (empty($_GET['code'])) { header('Loaction:http://' . urldecode($redirect)); exit; } $apps = array( 'www.b.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> //Des.php //当在www.a.com登录后将session信息传到其他域名下的文件下进行处理,以script标签包含的形式进行运行。 <?php class Des { /** * 简单对称加密算法之加密 * @param String $string 需要加密的字串 * @param String $skey 加密EKY * @return String */ public static function encode($string = '', $skey = 'cxphp') { $strArr = str_split(base64_encode($string)); $strCount = count($strArr); foreach (str_split($skey) as $key => $value) { $key < $strCount && $strArr[$key] .= $value; } return str_replace(array('=', '+', '/'), array('O0O0O', 'o000o', 'oo00o'), join('', $strArr)); } /** * 简单对称加密算法之解密 * @param String $string 需要解密的字串 * @param String $skey 解密KEY * @return String */ public static function decode($string = '', $skey = 'cxphp') { $strArr = str_split(str_replace(array('O0O0O', 'o000o', 'oo00o'), array('=', '+', '/'), $string), 2); $strCount = count($strArr); foreach (str_split($skey) as $key => $value) { $key <= $strCount && isset($strArr[$key]) && $strArr[$key][1] === $value && $strArr[$key] = $strArr[$key][0]; } return base64_decode(join('', $strArr)); } }
3.在www.b.com的根目录下创建如下文件
//slogin.php文件 完成session的设置 <?php session_start(); header('Content-Type:text/javascript; charset=utf-8'); if(!empty($_GET['code'])){ require './Des.php'; $username = Des::decode($_GET['code'],'a'); 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.此时访问www.a.com和www.b.com都是未登录状态
登录后两个域名下都是登录状态
到此我们实现了一个简单的单点登录。
done!
相关文章推荐
- php的sso单点登录实现方法,代码实例!
- PHP实现QQ登录实例代码
- PHP+MYSQL+MYSQL+SESSION实现用户登录的实例
- 使用php实现单点登录实例详解
- php实现单点登录实例
- PHP实现QQ登录实例代码
- PHP MongoDB 简单用户登录实现的实例
- PHP后台实现微信小程序登录
- php 登录实例演示
- php实现第三方登录
- php实现记住密码自动登录方法
- php实现的click captcha点击验证码类实例
- php和form来实现登录登出
- php实现记住密码自动登录
- php 多态与接口学习实现与实例代码
- JSP+Servlet+JavaBean实现登录网页实例详解
- php实现的Cookies操作类实例
- php实现的双向队列类实例
- PHP实现注册登录
- php实现过滤字符串中的中文和数字实例