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

时间: 2024-08-27 00:15:22

PHP简单实现单点登录功能示例的相关文章

如何使用邮件系统“单点登录”功能

相信我们每个人都有这样的经历,比方说银行卡多的人要具体记忆每张卡的密码挺麻烦:现代人兴 趣广泛,爱好多多,运动健身俱乐部.娱乐游戏休闲.购物理财等各种场合少不了获得入门的"通行证",要输入各种密码.类似的情况在企业也常见,如今一些企 业大搞信息化建设,物流.数据流.资金流等纳入各种系统进行管理,工作人员经常需要在不同系统之间切换,输入不同的密码,不但繁琐,而且容易出错.有没有 这样一种可能,将众多办公系统都集成到一点,只需要登录某个系统,无需频繁切换,即可实现登录其他系统?U-Mail

邮件服务器“单点登录”功能

现状分析: 相信我们每个人都有这样的经历,比方说银行卡多的人要具体记忆每张卡的密码挺麻烦:现代人兴 趣广泛,爱好多多,运动健身俱乐部.娱乐游戏休闲.购物理财等各种场合少不了获得入门的“通行证”,要输入各种密码.类似的情况在企业也常见,如今一些企 业大搞信息化建设,物流.数据流.资金流等纳入各种系统进行管理,工作人员经常需要在不同系统之间切换,输入不同的密码,不但繁琐,而且容易出错.有没有 这样一种可能,将众多办公系统都集成到一点,只需要登录某个系统,无需频繁切换,即可实现登录其他系统?U-Mai

java实现简单的单点登录 (转)

摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现.源代码和详细讲解:还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面.本文除了从多个方面和角度给出了对单点登录(SSO)的全面分析,还并且讨论了如何将现有的应用和SSO服务结合起来,能够帮助应用架构师和系统分析人员从本质上认识单点登录,从而更好地设

java实现简单的单点登录

摘要:单点登录(SSO)的技术被越来越广泛地运用到各个领域的软件系统当中.本文从业务的角度分析了单点登录的需求和应用领域:从技术本身的角度分析了单点登录技术的内部机制和实现手段,并且给出Web-SSO和桌面SSO的实现.源代码和详细讲解:还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面.本文除了从多个方面和角度给出了对单点登录(SSO)的全面分析,还并且讨论了如何将现有的应用和SSO服务结合起来,能够帮助应用架构师和系统分析人员从本质上认识单点登录,从而更好地设

使用CAS实现单点登录功能

目录 单点登录 简介 CAS服务器部署 上传tomcat服务器压缩到文件夹/usr/local/cas目录下,解压,修改tomcat文件夹名为tomcat 修改tomcat配置文件的端口号 关闭tomcat服务器,把CAS的war包放入tomcat的webapps目录当中后再启动tomcat服务器 对war包时行解压 关闭tomcat服务器后, 删除war包 监听启动 启动tomcat服务器 访问http://192.168.1.88:9100/cas/login 输入用户名casuser 密码

移动设备单点登录功能实现

思路:       当用户正确输入用户名和密码,点击确认登录之后,后台单点登录系统(simple-sso)获取用户名和密码,正确比对完用户名和密码之后,要为当前登录的用户生成一个登录的凭证(token), String token = userName+"&"+System.currentTimeMillis();然后把token的值返回给移动端,同时在redis缓存中保存次登录用户的登录凭证. 但是在生成token之前要判断此前此用户是否在另外一台设备上已经登录过了,如果登录

【C#】ASP.NET网页中添加单点登录功能

背景 首先,要说明的是,原先需求定义的是,同一个账号只能同时有一个人来登录,如果另外一个登录的话,前一个登陆者就自动被踢掉.本来原先要做成存储到服务器的数据库中,但是后来如果是非正常退出的话 下次就没法登录,这下就上网找资料 改了以后就有了下面的东东了. 登陆页后台 Login.aspx.cs //单点登录判断 Hashtable hOnline = (Hashtable)Application["Online"]; if (hOnline != null) { int i = 0;

node.js基于express框架搭建一个简单的注册登录Web功能

这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注明一下版本,因为express因为版本的不同使用的方式也不同,我这算是目前最新的了吧 还没有装express的可以移步到这里 看看express框架的获取安装 1.简单地项目初始化 进入你的nodejs安装路径下边,如图,然后执行命令  express -e test  (这里把项目名设置为test

ASP.NET中登录功能的简单逻辑设计

 ASP.NET中登录功能的简单逻辑设计                               概述                               逻辑设计                               1.接收参数                               2.判断参数合法性                               3.访问数据库                               4.保存Session