单点登录(手写php代码)

时间:2022-11-22 09:04:38

//假设有三个网站,分别是网站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="登录" onclick="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="登录" onclick="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);