jsonp跨域實現單點登錄,跨域傳遞用戶信息以及保存cookie注意事項


網站A:代碼:網站a的login。html頁面刷新,使用jsonp方式將信息傳遞給b.com的login.php中去,只需要在b.com中設置一下跨域以及接收參數,然后存到cookei即可,

注意:網站A的jsnop傳值后,網站B的login.php文件不能放到瀏覽器中打開刷新查看傳遞的值,這樣會接收不到傳遞過來的值,需要到另外一個頁面打印生成的cookei值來顯示,login.php只做邏輯處理,要顯示

效果需要到cookei.php中打印效果

網站A的login.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="js/jquery.js"></script>
<script type="text/javascript">
$(function(){

     $.ajax({
         type : 'get',
         url:'http://b.com/login.php',
        data : {
            uid : '333333',
            password : '858888',
        },
        cache :false,
        jsonp: "callback",
        jsonpCallback:"success",
        dataType : 'jsonp',
        success:function(data){
            //alert(data);
        },
        error:function(data){
            //alert('error');
        }        
    });
});
</script>
</head>
<body>
<input id='inputtest' value='546' name='inputtest'>
<div id='testdiv'></div>
</body>
</html>

網站B的login.php頁面,本頁面只做邏輯處理,千萬別用來打印顯示任何東西,否則會清空jsonp傳過來的值

<?php
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Headers:Authorization');
header("Access-Control-Allow-Methods: GET, POST, DELETE");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Content-Type, X-Requested-With, Cache-Control,Authorization");

file_put_contents('test.txt',$_GET);
setcookie("user_ticket",$_GET['uid'], time()+3600*24 ,"/");
$_COOKIE['user_ticket'] = $_GET['uid'];

 

網站B的cookei.php頁面,本頁面用來顯示login.php頁面中生成的cookie的值,用來查看效果

<?php

print_r( $_COOKIE);

自此jsonp跨域傳值完成,此功能可用來進行單點登錄,

用戶1在網站A登陸后,在cookie中會有本用戶的sessionid來判別身份,將sesion信息存在redis中去,並將本用戶信息存在cookei中或者在登錄成功頁面寫兩個隱藏域

吧用戶信息放到隱藏域里面,使用jsonp將用戶信息,發送給網站B,

網站B使用上述方法,獲取到用戶1的信息后,存到cookei中去,然后將cookei中的用戶信息去與redis中信息比對,看看是否登錄過期,以及安全驗證,

如果驗證通過,將用戶1信息,存到網站B的session或者cookei中去,實現單點登錄

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM