php实现SSO单点登录实例

来源:互联网 发布:windows ui框架 编辑:程序博客网 时间:2024/06/05 00:12
1、点击登录跳转到SSO登录页面并带上当前应用的callback地址
2、登录成功后生成COOKIE并将COOKIE传给callback地址
3、callback地址接收SSO的COOKIE并设置在当前域下再跳回到应用1即完成登录
4、再在应用程序需要登录的地方嵌入一个iframe用来实时检测登录状态

 

 1 <?php 2 //index.php 应用程序页面 3 header('Content-Type:text/html; charset=utf-8'); 4 $sso_address      = 'http://www.c.com/sso_login.php'; //你SSO所在的域名 5 $callback_address = 'http://' . $_SERVER['HTTP_HOST'] 6     . str_replace('index.php', '', $_SERVER['SCRIPT_NAME']) 7     . 'callback.php'; //callback地址用于回调设置cookie 8  9 if (isset($_COOKIE['sign'])) {10     exit("欢迎您{$_COOKIE['sign']} <a href=\"login.php?logout\">退出</a>");11 } else {12     echo '您还未登录 <a href="' . $sso_address . '?callback=' . $callback_address . '">点此登录</a>';13 }14 ?>15 <iframe src="<?php echo $sso_address ?>?callback=<?php echo $callback_address ?>" frameborder="0" width="0"16         height="0"></iframe>17 18 <?php19 //callback.php 回调页面用来设置跨域COOKIE20 header('Content-Type:text/html; charset=utf-8');21 if (empty($_GET)) {22     exit('您还未登录');23 } else {24     foreach ($_GET as $key => $val) {25         setcookie($key, $val, 0, '');26     }27     header("location:index.php");28 }29 ?>30 31 <?php32 //connect.php 用来检测登录状态的页面,内嵌在页面的iframe中33 header('Content-Type:text/html; charset=utf-8');34 if (isset($_COOKIE['sign'])) {35     $callback = urldecode($_GET['callback']);36     unset($_GET['callback']);37     $query    = http_build_query($_COOKIE);38     $callback = $callback . "?{$query}";39 } else {40     exit;41 }42 ?>43 <html>44 <script type="text/javascript">top.location.href = "<?php echo $callback; ?>";</script>45 </html>46 47 48 <?php49 50 //login.php SSO登录页面51 header('Content-Type:text/html; charset=utf-8');52 if (isset($_GET['logout'])) {53     setcookie('sign', '', -300);54     unset($_GET['logout']);55     header('location:index.php');56 }57 58 if (isset($_POST['username']) && isset($_POST['password'])) {59     setcookie('sign', $_POST['username'], 0, '');60     header("location:" . $_POST['callback'] . "?sign={$_POST['username']}");61 }62 63 if (empty($_COOKIE['sign'])) {64     ?>65 66     <form method="post">67         <p>用户名:<input type="text" name="username"/></p>68         <p>密 码:<input type="password" name="password"/></p>69         <input type="hidden" name="callback" value="<?php echo $_GET['callback']; ?>"/>70         <input type="submit" value="登录"/>71     </form>72 73 74     <?php75 } else {76     $query = http_build_query($_COOKIE);77     echo "系统检测到您已登录 {$_COOKIE['sign']} <a href=\"{$_GET['callback']}?{$query}\">授权</a> <a href=\"?logout\">退出</a>";78 }

 

done!

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 一岁宝宝有鼻炎怎么办 蒸馒头的面酸了怎么办 dnf点券充错账号了怎么办 英雄联盟点券充错区了怎么办 文玩鼻烟壶盖子松了怎么办 文胸磨腋下的肉怎么办 荷兰在窝里拉屎怎么办 宝宝把泡沫吃了怎么办 荷兰猪一直叫该怎么办 人吃了缓冲泡沫怎么办 不小心吃了泡沫怎么办 不想养荷兰猪了怎么办 刚买的乌龟死了怎么办 剪猫指甲出血了怎么办 猫吃了酸性植物怎么办 金鱼在缸底不动怎么办 野兔子不吃不喝怎么办 让荷兰猪咬了怎么办 仓鼠的脚被棉花怎么办 仓鼠的脚变黑了怎么办 夏天小仓鼠生了怎么办 把仓鼠摔出血了怎么办 仓鼠摔成骨折了怎么办 孩子被仓鼠咬了怎么办 仓鼠不咬磨牙石怎么办 仓鼠妈妈跑了宝宝怎么办 买的仓鼠繁殖了怎么办 仓鼠没有鼠粮了怎么办 仓鼠被踩吐血了怎么办? 买的蓝莓太酸怎么办 荷兰猪夏天掉毛怎么办 被猫抓伤肿了怎么办 荷兰猪鼻子破了怎么办 荷兰猪吃了包菜怎么办 龙猫不爱吃主粮怎么办 荷兰猪躲起来了怎么办 荷兰猪一直叫是怎么办 龙猫不吃粗的主粮怎么办 转龙猫中暑症状+龙猫中暑怎么办 火车上空调太冷怎么办 格力空调太冷怎么办