一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - PHP教程 - php的sso單點登錄實現方法

php的sso單點登錄實現方法

2020-08-28 11:26PHP教程網 PHP教程

這篇文章主要介紹了php的sso單點登錄實現方法,實例分析了sso單點登錄的原理與具體實施步驟,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了php的sso單點登錄實現方法。分享給大家供大家參考。具體分析如下:

這里詳細講到了幾點:
1、點擊登錄跳轉到SSO登錄頁面并帶上當前應用的callback地址
2、登錄成功后生成COOKIE并將COOKIE傳給callback地址
3、callback地址接收SSO的COOKIE并設置在當前域下再跳回到應用1即完成登錄
4、再在應用程序需要登錄的地方嵌入一個iframe用來實時檢測登錄狀態,代碼如下:
index.php 應用程序頁面:

復制代碼 代碼如下:
<?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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 天作谜案免费完整版在线观看 | 国产综合视频 | 日本天堂网| 动漫在线观看h | 四虎小视频 | 日产精品一卡2卡三卡4乱码久久 | 亚洲青草| chinese男同志videos | 美女撒尿部位无遮挡 | 青草视频免费观看 | 我在厨房摸岳的乳HD在线观看 | 99久久免费视频 | 窝窝午夜精品一区二区 | 亚洲成人一区二区 | 黄色wwwwww| 欧美日韩在线观看区一二 | jizz漫画| 久久精品视频在线看 | 国产一卡2卡3卡4卡公司科普 | 国产精品久久久免费视频 | 国产成人精品免费午夜 | 和岳m的小说 | 奇米社区| 精品网站一区二区三区网站 | 网友自拍偷拍 | 公交车强校花系列小说 | bt天堂在线最新版在线 | 成人伊人亚洲人综合网站222 | 国产高清在线播放免费观看 | 女教师系列三上悠亚在线观看 | ipx 在线播放 | 视频在线观看入口一二三2021 | 91粉色视频在线导航 | 国产精品男人的天堂 | 免费99精品国产自在现线 | 国产午夜成人无码免费看 | 香蕉eeww99国产精选播放 | 无码一区国产欧美在线资源 | 日韩欧美中文字幕一区 | 给我免费观看的视频在线播放 | 亚洲精品国产成人99久久 |