• 售前

  • 售后

热门帖子
入门百科

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

[复制链接]
大脚吴妈 显示全部楼层 发表于 2021-10-25 19:28:56 |阅读模式 打印 上一主题 下一主题
本文实例讲述了PHP简朴实现单点登录功能。分享给各人供各人参考,详细如下:
1.预备两个假造域名
127.0.0.1  www.openpoor.com
127.0.0.1  www.myspace.com
2.在openpoor的根目录下创建以下文件
index.PHP
  1. <?php
  2. session_start();
  3. ?>
  4. <!DOCTYPE html>
  5. <html>
  6. <head>
  7. <meta charset="UTF-8"/>
  8. <title>sync login</title>
  9. </head>
  10. <body>
  11. <?php if(empty($_SESSION['username'])):?>
  12. hello,游客;请先<a href="login.php" rel="external nofollow" >登录</a><a href="http://www.myspace.com/index.php" rel="external nofollow" rel="external nofollow" >进入空间</a>
  13. <?php else: ?>
  14. hello,<?php echo $_SESSION['username']; ?>;<a href="http://www.myspace.com/index.php" rel="external nofollow" rel="external nofollow" >进入空间</a>
  15. <?php endif; ?>
  16. <a href="http://www.openpoor.com/index.php" rel="external nofollow" >home</a>
  17. </body>
  18. </html>
复制代码
login.php
  1. <?php
  2. session_start();
  3. if(!empty($_POST['username'])){
  4. require '../Des.php';
  5. $_SESSION['username'] = $_POST['username'];
  6. $redirect = 'http://www.openpoor.com/index.php';
  7. header('Location:http://www.openpoor.com/sync.php?redirect='.urlencode($redirect).'&code='.Des::encrypt($_POST['username'],'openpoor'));exit;
  8. }
  9. ?>
  10. <!DOCTYPE html>
  11. <html>
  12. <head>
  13. <meta charset="UTF-8"/>
  14. <title>sync login</title>
  15. </head>
  16. <body>
  17. <form action="" method="post">
  18. <input type="text" name="username" placeholder="用户名"/>
  19. <input type="text" name="password" placeholder="密码"/>
  20. <input type="submit" value="登录"/>
  21. </form>
  22. </body>
  23. </html>
复制代码
sync.php
  1. <?php
  2. $redirect = empty($_GET['redirect']) ? 'www.openpoor.com' : $_GET['redirect'];
  3. if(empty($_GET['code'])){
  4. header('Loaction:http://'.urldecode($redirect));
  5. exit;
  6. }
  7. $apps = array(
  8. 'www.myspace.com/slogin.php'
  9. );
  10. ?>
  11. <!DOCTYPE html>
  12. <html>
  13. <head>
  14. <meta charset="UTF-8"/>
  15. <?php foreach($apps as $v): ?>
  16. <script type="text/javascript" src="http://<?php echo $v.'?code='.$_GET['code'] ?>"></script>
  17. <?php endforeach; ?>
  18. <title>passport</title>
  19. </head>
  20. <body>
  21. <script type="text/javascript">
  22. window.onload=function(){
  23. location.replace('<?php echo $redirect; ?>');
  24. }
  25. </script>
  26. </body>
  27. </html>
复制代码
3.在myspace的根目录下创建如下文件
slogin文件 完成session的设置
  1. <?php
  2. session_start();
  3. header('Content-Type:text/javascript; charset=utf-8');
  4. if(!empty($_GET['code'])){
  5. require '../Des.php';
  6. $username = Des::decrypt($_GET['code'],'openpoor');
  7. if(!empty($username)){
  8.   header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
  9.   $_SESSION['username'] = $username;
  10. }
  11. }
  12. ?>
复制代码
index.php
  1. <?php
  2. session_start();
  3. if(!empty($_SESSION['username']))
  4. {
  5.   echo "欢迎来到".$_SESSION['username']."的空间";
  6. }else{
  7.   echo "请先登录";
  8. }
  9. ?>
复制代码
4.Des.php的文件内容如下
  1. <?php
  2. /**
  3. *@see Yii CSecurityManager;
  4. */
  5. class Des{
  6. public static function encrypt($data,$key){
  7.    $module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,'');
  8.    $key=substr(md5($key),0,mcrypt_enc_get_key_size($module));
  9.    srand();
  10.    $iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($module), MCRYPT_RAND);
  11.    mcrypt_generic_init($module,$key,$iv);
  12.    $encrypted=$iv.mcrypt_generic($module,$data);
  13.    mcrypt_generic_deinit($module);
  14.    mcrypt_module_close($module);
  15.    return md5($data).'_'.base64_encode($encrypted);
  16. }
  17. public static function decrypt($data,$key){
  18.    $_data = explode('_',$data,2);
  19.    if(count($_data)<2){
  20.   return false;
  21.    }
  22.    $data = base64_decode($_data[1]);
  23.    $module=mcrypt_module_open('des','', MCRYPT_MODE_CBC,'');
  24.    $key=substr(md5($key),0,mcrypt_enc_get_key_size($module));
  25.    $ivSize=mcrypt_enc_get_iv_size($module);
  26.    $iv=substr($data,0,$ivSize);
  27.    mcrypt_generic_init($module,$key,$iv);
  28.    $decrypted=mdecrypt_generic($module,substr($data,$ivSize,strlen($data)));
  29.    mcrypt_generic_deinit($module);
  30.    mcrypt_module_close($module);
  31.    $decrypted = rtrim($decrypted,"\0");
  32.    if($_data[0]!=md5($decrypted)){
  33.   return false;
  34.    }
  35.    return $decrypted;
  36. }
  37. }
  38. ?>
复制代码
当在openpoor登录后将session信息传到其他域名下的文件下举行处置惩罚,以script标签包罗的情势举行运行。
5.此时访问www.openpoor.com和www.myspace.com都是未登录状态


登录后两个域名下都是登录状态


到此我们实现了一个简朴的单点登录。
更多关于PHP相干内容感爱好的读者可查察本站专题:《PHP+MySQL会员系统开发专题》、《PHP数据结构与算法教程》、《php步调计划算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作本领大全》、《PHP常用遍历算法与本领总结》及《PHP数学运算本领总结》
盼望本文所述对各人PHP步调计划有所资助。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作