日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

PHP简单实现单点登录功能示例

發布時間:2023/12/1 php 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PHP简单实现单点登录功能示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.準備兩個虛擬域名

127.0.0.1? www.openpoor.com
127.0.0.1? www.myspace.com

2.在openpoor的根目錄下創建以下文件

index.PHP

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 <?php session_start(); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>sync login</title> </head> <body> <?php if(empty($_SESSION['username'])):?> hello,游客;請先<a href="login.php" rel="external nofollow" >登錄</a><a href="http://www.myspace.com/index.php" rel="external nofollow" rel="external nofollow" >進入空間</a> <?php else: ?> hello,<?php echo $_SESSION['username']; ?>;<a href="http://www.myspace.com/index.php" rel="external nofollow" rel="external nofollow" >進入空間</a> <?php endif; ?> ?<a href="http://www.openpoor.com/index.php" rel="external nofollow" >home</a> </body> </html>

login.php

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <?php session_start(); if(!empty($_POST['username'])){ ?require '../Des.php'; ?$_SESSION['username'] = $_POST['username']; ?$redirect = 'http://www.openpoor.com/index.php'; ?header('Location:http://www.openpoor.com/sync.php?redirect='.urlencode($redirect).'&code='.Des::encrypt($_POST['username'],'openpoor'));exit; } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <title>sync login</title> </head> <body> <form action="" method="post"> ?<input type="text" name="username" placeholder="用戶名"/> ?<input type="text" name="password" placeholder="密碼"/> ?<input type="submit" value="登錄"/> </form> </body> </html>

sync.php

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 <?php $redirect = empty($_GET['redirect']) ? 'www.openpoor.com' : $_GET['redirect']; if(empty($_GET['code'])){ ?header('Loaction:http://'.urldecode($redirect)); ?exit; } $apps = array( ?'www.myspace.com/slogin.php' ); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <?php foreach($apps as $v): ?> <script type="text/javascript" src="http://<?php echo $v.'?code='.$_GET['code'] ?>"></script> <?php endforeach; ?> <title>passport</title> </head> <body> <script type="text/javascript"> window.onload=function(){ ?location.replace('<?php echo $redirect; ?>'); } </script> </body> </html>

3.在myspace的根目錄下創建如下文件

slogin文件 完成session的設置

1 2 3 4 5 6 7 8 9 10 11 12 <?php session_start(); header('Content-Type:text/javascript; charset=utf-8'); if(!empty($_GET['code'])){ ?require '../Des.php'; ?$username = Des::decrypt($_GET['code'],'openpoor'); ?if(!empty($username)){ ??header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); ??$_SESSION['username'] = $username; ?} } ?>

index.php

?
1 2 3 4 5 6 7 8 9 <?php session_start(); if(!empty($_SESSION['username'])) { ??echo "歡迎來到".$_SESSION['username']."的空間"; }else{ ??echo "請先登錄"; } ?>

4.Des.php的文件內容如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <?php /** ?*@see Yii CSecurityManager; ?*/ class Des{ ?public static function encrypt($data,$key){ ???$module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,''); ???$key=substr(md5($key),0,mcrypt_enc_get_key_size($module)); ???srand(); ???$iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($module), MCRYPT_RAND); ???mcrypt_generic_init($module,$key,$iv); ???$encrypted=$iv.mcrypt_generic($module,$data); ???mcrypt_generic_deinit($module); ???mcrypt_module_close($module); ???return md5($data).'_'.base64_encode($encrypted); ?} ?public static function decrypt($data,$key){ ???$_data = explode('_',$data,2); ???if(count($_data)<2){ ??return false; ???} ???$data = base64_decode($_data[1]); ???$module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,''); ???$key=substr(md5($key),0,mcrypt_enc_get_key_size($module)); ???$ivSize=mcrypt_enc_get_iv_size($module); ???$iv=substr($data,0,$ivSize); ???mcrypt_generic_init($module,$key,$iv); ???$decrypted=mdecrypt_generic($module,substr($data,$ivSize,strlen($data))); ???mcrypt_generic_deinit($module); ???mcrypt_module_close($module); ???$decrypted = rtrim($decrypted,"\0"); ???if($_data[0]!=md5($decrypted)){ ??return false; ???} ???return $decrypted; ?} } ?>

當在openpoor登錄后將session信息傳到其他域名下的文件下進行處理,以script標簽包含的形式進行運行。

5.此時訪問www.openpoor.com和www.myspace.com都是未登錄狀態

登錄后兩個域名下都是登錄狀態

到此我們實現了一個簡單的單點登錄。

轉載于:https://www.cnblogs.com/matengfei123/p/9872351.html

總結

以上是生活随笔為你收集整理的PHP简单实现单点登录功能示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。