php的sso单点登录实现方法 |
本文标签:php,sso,单点,登录,方法 本文实例讲述了php的sso单点登录实现方法 。分享给大家供大家参考 。具体分析如下: 这里详细讲到了几点: 复制代码 代码如下: <?php header(Content-Type:text/html; charset=utf-8); $sso_address = http://XXXX.com/sso/login.php; //你SSO所在的域名 $callback_address = http://.$_SERVER[HTTP_HOST] .str_replace(index.php,,$_SERVER[SCRIPT_NAME]) .callback.php; //callback地址用于回调设置cookie if(isset($_COOKIE[sign])){ exit("欢迎您{$_COOKIE[sign]} <a href="login.php?logout">退出</a>"); }else{ echo 您还未登录 <a href=".$sso_address.?callback=.$callback_address.">点此登录</a>; } ?> <iframe src="<?php echo $sso_address ?>?callback=<?php echo $callback_address ?>" frameborder="0" width="0" height="0"></iframe> login.php SSO登录页面: 复制代码 代码如下: <?php header(Content-Type:text/html; charset=utf-8); if(isset($_GET[logout])){ setcookie(sign,,-300); unset($_GET[logout]); header(location:index.php); } if(isset($_POST[username]) && isset($_POST[password])){ setcookie(sign,$_POST[username],0,); header("location:".$_POST[callback]."?sign={$_POST[username]}"); } if(emptyempty($_COOKIE[sign])){ ?> <form method="post"> <p>用户名:<input type="text" name="username" /></p> <p>密 码:<input type="password" name="password" /></p> <input type="hidden" name="callback" value="<?php echo $_GET[callback]; ?>" /> <input type="submit" value="登录" /> </form> <?php }else{ $query = http_build_query($_COOKIE); echo "系统检测到您已登录 {$_COOKIE[sign]} <a href="{$_GET[callback]}?{$query}">授权</a> <a href="?logout">退出</a>"; } ?> callback.php 回调页面用来设置跨域COOKIE: 复制代码 代码如下: <?php header(Content-Type:text/html; charset=utf-8); if(emptyempty($_GET)){ exit(您还未登录); }else{ foreach($_GET as $key=>$val){ setcookie($key,$val,0,); } header("location:index.php"); } ?> connect.php 用来检测登录状态的页面,内嵌在页面的iframe中: 复制代码 代码如下: <?php
header(Content-Type:text/html; charset=utf-8); if(isset($_COOKIE[sign])){ $callback = urldecode($_GET[callback]);unset($_GET[callback]); $query = http_build_query($_COOKIE); $callback = $callback."?{$query}"; }else{ exit; } ?> <html><script type="text/javascript">top.location.href="<?php echo $callback; ?>";</script></html> 希望本文所述对大家的php程序设计有所帮助 。 |