首页 >后端开发 >php教程 >php的sso单点登录实现方法

php的sso单点登录实现方法

PHP中文网
PHP中文网原创
2017-03-21 13:49:211327浏览

本文实例讲述了php的sso单点登录实现方法。分享给大家供大家参考。具体分析如下:

这里详细讲到了几点:
1、点击登录跳转到SSO登录页面并带上当前应用的callback地址
2、登录成功后生成COOKIE并将COOKIE传给callback地址
3、callback地址接收SSO的COOKIE并设置在当前域下再跳回到应用1即完成登录
4、再在应用程序需要登录的地方嵌入一个iframe用来实时检测登录状态,代码如下:
index.php 应用程序页面:

代码如下:

<?php  
header(&#39;Content-Type:text/html; charset=utf-8&#39;);  
$sso_address = &#39;http://XXXX.com/sso/login.php&#39;; //你SSO所在的域名  
$callback_address = &#39;http://&#39;.$_SERVER[&#39;HTTP_HOST&#39;]  
                    .str_replace(&#39;index.php&#39;,&#39;&#39;,$_SERVER[&#39;SCRIPT_NAME&#39;])  
                    .&#39;callback.php&#39;; //callback地址用于回调设置cookie 
 
if(isset($_COOKIE[&#39;sign&#39;])){  
    exit("欢迎您{$_COOKIE[&#39;sign&#39;]} 退出");  
}else{  
    echo &#39;您还未登录 点此登录&#39;;  
}  
?>

login.php SSO登录页面:

代码如下:

<?php  
header(&#39;Content-Type:text/html; charset=utf-8&#39;);  
if(isset($_GET[&#39;logout&#39;])){  
    setcookie(&#39;sign&#39;,&#39;&#39;,-300);  
    unset($_GET[&#39;logout&#39;]);  
    header(&#39;location:index.php&#39;);  
} 
 
if(isset($_POST[&#39;username&#39;]) && isset($_POST[&#39;password&#39;])){  
    setcookie(&#39;sign&#39;,$_POST[&#39;username&#39;],0,&#39;&#39;);  
    header("location:".$_POST[&#39;callback&#39;]."?sign={$_POST[&#39;username&#39;]}");  
} 
 
if(emptyempty($_COOKIE[&#39;sign&#39;])){  
?>
<?php  
}else{  
    $query = http_build_query($_COOKIE);  
    echo "系统检测到您已登录 {$_COOKIE[&#39;sign&#39;]} 授权 退出";  
}  
?>


callback.php 回调页面用来设置跨域COOKIE:

代码如下:

<?php  
header(&#39;Content-Type:text/html; charset=utf-8&#39;);  
if(emptyempty($_GET)){  
    exit(&#39;您还未登录&#39;);  
}else{  
    foreach($_GET as $key=>$val){  
        setcookie($key,$val,0,&#39;&#39;);  
    }  
    header("location:index.php");  
} 
?>

connect.php 用来检测登录状态的页面,内嵌在页面的iframe中:

代码如下:

<?php
header(&#39;Content-Type:text/html; charset=utf-8&#39;);  
if(isset($_COOKIE[&#39;sign&#39;])){  
    $callback = urldecode($_GET[&#39;callback&#39;]);unset($_GET[&#39;callback&#39;]);  
    $query = http_build_query($_COOKIE);  
    $callback = $callback."?{$query}";  
}else{
    exit;  
}  
?>

希望本文所述对大家的php程序设计有所帮助。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn