• 沙里软件

  • ShaliSoft.com [手机站]   办公桌收纳抽屉
  • 首页
  • 博文
  • 演示
  • 管理
  • php sso单点登录实现代码

    网络   2013/10/3 21:44:26

    下面详细讲到了几点。1、点击登录跳转到SSO登录页面并带上当前应用的callback地址2、登录成功后生成COOKIE并将COOKIE传给callback地址3、callback地址接收SSO的COOKIE并设置在当前域下再跳回到应用1即完成登录4、再在应用程序需要登录的地方嵌入一个iframe用来实时检测登录状态

    <?php
    //index.php 应用程序页面
    header('Content-Type:text/html; charset=utf-8');
    $sso_address = 'http://2spaoku.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>
    <?php
    //login.php SSO登录页面
    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(empty($_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>";
    }
    ?>
    <?php
    //callback.php 回调页面用来设置跨域COOKIE
    header('Content-Type:text/html; charset=utf-8');
    if(empty($_GET)){
        exit('您还未登录');
    }else{
        foreach($_GET as $key=>$val){
            setcookie($key,$val,0,'');
        }
        header("location:index.php");
    }
    ?>
    <?php
    //connect.php 用来检测登录状态的页面,内嵌在页面的iframe中
    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>


    阅读(270287) 分享(0)

    上一篇: php中检测上传文件类型与上传图片大小代码
    下一篇: php图片上传类,支持加水印,生成略缩图

  • 精彩推荐

    ◆ 安装完office后 在组件服务里DCOM配置中找不到
    ◆ 微信清缓存工具,微信怎么清理缓存?
    ◆ 用回溯法解决子集和问题【C#版本】
    ◆ 实测什么物体会影响WIFI信号
    ◆ 利用UC微信分享接口进行WEB微信分享
    ◆ ASP.NET之GridView Eval() 中数据格式化或格式化数据
    ◆ css常用hack语法
    ◆ 面向对象的缺点,你了解了吗
    ◆ 我国首台可人脸识别ATM机发布 不刷脸不能取钱
    ◆ 2G网络要关闭了吗?你还不打算换4G手机?
  • 用心做事 不能唯利是图

    • 吊儿
    • 用QQ联系我17905772
  • 搜索


  • 最新文章

    • MySQL配置优化
    • EditPlus 添加文件比较工具winmerge
    • 滚动悬浮固定JS特效
    • Windows Server 2003操作系统单网卡搭建VPN服务器
    • 安装完office后 在组件服务里DCOM配置中找不到

  • 热门文章

    • php sso单点登录实现代码
    • 中国菜刀(China chopper) 最新黑客工具
    • redis.conf中文版(基于2.4)
    • 搜索引擎名单大全
    • php图片上传类,支持加水印,生成略缩图

  • 最新图库


  • 最新评论


  • 友情链接

  • 沙里软件

  • 最近访客

    Powered by ShaliSoft.com 豫ICP备13008529号

    免责声明:本站部分内容来源于互联网,转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责,也不构成任何其他建议。如果发现侵犯版权,联系QQ17905772进行删除。