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

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

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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 91麻豆影视 | 女毛片| 免费一级毛片在线播放放视频 | 垫底辣妹免费观看完整版 | 男同桌脱我奶罩吸我奶作文 | 午夜影院一区二区三区 | 九色PORNY真实丨国产免费 | 欧美大片一级片 | 好男人资源免费观看 | 精品在线看 | 末代皇帝无删减版在线观看 | 美女全身无遮挡 | 美女脱得一二净无内裤全身的照片 | juliaann大战两个黑人 | 369手机看片 | 欧美久久久久久久一区二区三区 | 四虎影院的网址 | 九九热精品免费观看 | 青青国产成人久久激情911 | 日本一级不卡一二三区免费 | 欧美日韩一区二区三区免费 | 手机在线免费观看高清 | 变态 另类 国产 亚洲 | 国内精品一区二区三区东京 | 手机看片福利盒子久久 | t66y地址一地址二地址三 | 闺蜜高h | 精品国产免费久久久久久 | 亚洲精品国产在线观看 | 日本中文字幕黑人借宿影片 | 精新精新国产自在现拍 | 国产91对白在线观看 | 3d蒂法精品啪啪一区二区免费 | 欧美在线一级视频 | 32pao强力打造免费高速高清 | 国内自拍视频在线观看 | 午夜香蕉 | 91精品综合久久久久久五月天 | 午夜久久免费视频 | 亚洲成人第一 | 欧美一区二区三区四区视频 |