单点登录(手写php代码)

//假设有三个网站,分别是网站web1(验证登录)网站shop以及网站getinfo

//第一步:网站shop里面引入jquery再新建一个login.php文件.

<?php
session_start();//开启session
header('content-type:text/html;charset=utf8');//设置字符集
if(isset($_SESSION['login'])){//判断登录
    echo "登录状态";
    echo "<a href='exitlogin.php'>退出</a>";
    ?>
    <script src="jquery-1.7.2.min.js"></script>
    <script>
        $.ajax({//实现ajax跨域到网站getinfo中的ui.php
            url:"http://localhost/xiaoshixun2/rikao/getinfo/ui.php?callback=testlogin",
            dataType:'jsonp',
            jsonpCallback:'testlogin',
            success:function(txt){
            }
        });
    </script>
    <?php
}
else{
    ?>
    <input type="text" name="username"/>
    <input type="text" name="pwd"/>
    <input type="submit" value="登录" οnclick="login()"/>
    <script src="jquery-1.7.2.min.js"></script>
    <script>
       function login(){//实现ajax登录验证
          var u=$("input[name=username]").val();
           var p=$("input[name=pwd]").val();
           $.ajax({
               url:"http://localhost/xiaoshixun2/rikao/web1/ucserver.php?username="+u+"&pwd="+p+"&callback=testlogin",
               dataType:'jsonp',
               jsonpCallback:'testlogin',
               success:function(txt){
                   if(txt.error==0){
                      location.href="ui.php?u="+txt.data.u+"&login="+txt.data.login;
                   }
                   else{
                      alert(txt.msg);
                   }
               }
           });
       }
    </script>
<?php
}
?>
//新建ui.php
<?php
session_start();
$_SESSION['login']=true;
$rs['error']=0;
if(isset($_GET['callback'])){//判断是否callback
    exit($_GET['callback']."(".json_encode($rs).")");
}
else{
    header('location:login.php');
}


//新建exitlogin.php
<?php
session_start();//开启session
session_destroy();//消除session
header('location:login.php');
//新建curl.php
<?php
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://localhost/xiaoshixun2/rikao/getinfo/ui.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_close($ch);
//第二步:在web1里新建ucserver.php
<?php
$n=$_GET['username'];//接收用户名
$p=$_GET['pwd'];//接收密码
//伪代码,此处用户名密码应该和数据库里匹配,此处用户名abc 密码 123是自定义的
if($n=="abc"&& $p=="123"){
  $rs['error']=0;
    $rs['data']=array('u'=>$n,'login'=>true);
    exit($_GET['callback']."(".json_encode($rs).")");
}
else{
    $rs['error']=1;
    $rs['msg']='你的用户或密码不正确';
    exit($_GET['callback']."(".json_encode($rs).")");
}

?>
//第三步:操作getinfo网站
//新建login.php
<?php
session_start();
//print_r($_SESSION);
header('content-type:text/html;charset=utf8');
if(isset($_SESSION['login_getinfo'])){
    echo "登录状态";
    echo "<a href='exitlogin.php'>退出</a>";
    ?>
    <script src="jquery-1.7.2.min.js"></script>
    <script>
        $.ajax({
            url:"http://localhost/xiaoshixun2/rikao/shop/ui.php?callback=testlogin",
            dataType:'jsonp',
            jsonpCallback:'testlogin',
            success:function(txt){
            }
        });
    </script>
<?php
}
else{
    ?>
    <input type="text" name="username"/>
    <input type="text" name="pwd"/>
    <input type="submit" value="登录" οnclick="login()"/>
    <script src="jquery-1.7.2.min.js"></script>
    <script>
        function login(){
            var u=$("input[name=username]").val();
            var p=$("input[name=pwd]").val();
            $.ajax({
                url:"http://localhost/xiaoshixun2/rikao/web1/ucserver.php?username="+u+"&pwd="+p+"&callback=testlogin",
                dataType:'jsonp',
                jsonpCallback:'testlogin',
                success:function(txt){
                    if(txt.error==0){
                        location.href="ui.php?u="+txt.data.u+"&login="+txt.data.login;
                    }
                    else{
                        alert(txt.msg);
                    }

                }

            });
        }
    </script>

<?php
}
?>
//新建ui.php
<?php
session_start();
$_SESSION['login_getinfo']=true;
$rs['error']=0;
if(isset($_GET['callback'])){
exit($_GET['callback']."(".json_encode($rs).")");
}else{
    header('location:login.php');
}
//新建exitlogin.php
<?php
session_start();
session_destroy();
header('location:login.php');
//新建curl.php
<?php
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://localhost/xiaoshixun2/rikao/shop/ui.php');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_exec($ch);
curl_close($ch);


单点登录(Single Sign-On,简称SSO)是一种身份验证和授权机制,允许用户使用一组凭据(如用户名和密码)登录到多个相关但独立的应用程序或系统中,而无需为每个应用程序单独进行身份验证。 在Java中,可以通过使用一些开源框架和技术来实现单点登录。以下是一个简单的示例,展示了如何手动实现基于Cookie的单点登录: 1. 创建一个登录页面(login.jsp),用于用户输入用户名和密码。 2. 创建一个验证用户的Servlet(LoginServlet),用于验证用户输入的用户名和密码是否正确。 3. 如果验证成功,生成一个唯一的令牌(token)并将其存储在服务器端的缓存或数据库中,并将该令牌作为Cookie发送给客户端。 4. 在其他应用程序中,创建一个过滤器(SSOFilter),用于检查请求中是否存在有效的令牌。 5. 当用户访问其他应用程序时,过滤器会检查请求中的令牌,并验证其有效性。如果令牌有效,则允许用户访问该应用程序;否则,重定向到登录页面进行身份验证。 6. 当用户注销或超时时,删除服务器端存储的令牌,并清除客户端的Cookie。 这只是一个简单的示例,实际的单点登录系统可能涉及更复杂的流程和安全性措施。在实际开发中,建议使用成熟的单点登录框架,如Spring Security、Shiro等,它们提供了更完善和安全的解决方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值