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

2018-09-07 13:40

阅读:294

  本文实例讲述了PHP简单实现单点登录功能。分享给大家供大家参考,具体如下:

  1.准备两个虚拟域名

  127.0.0.1
127.0.0.1

  2.在openpoor的根目录下创建以下文件

  index.PHP

   <?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=进入空间</a> <?php else: ?> hello,<?php echo $_SESSION[username]; ?>;<a href=进入空间</a> <?php endif; ?> <a href=

  login.php

   <?php session_start(); if(!empty($_POST[username])){ require ../Des.php; $_SESSION[username] = $_POST[username]; $redirect = 用户名/> <input type=text name=password placeholder=密码/> <input type=submit value=登录/> </form> </body> </html>

  sync.php

   <?php $redirect = empty($_GET[redirect]) ?

  3.在myspace的根目录下创建如下文件

  slogin文件 完成session的设置

   <?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

   <?php session_start(); if(!empty($_SESSION[username])) { echo 欢迎来到.$_SESSION[username].的空间; }else{ echo 请先登录; } ?>

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

   <?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.此时访问和都是未登录状态

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

  到此我们实现了一个简单的单点登录。

  更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP+MySQL会员系统开发专题》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《php字符串(string)用法总结》、《PHP数组(Array)操作技巧大全》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》

  希望本文所述对大家PHP程序设计有所帮助。


评论


亲,登录后才可以留言!