天天看點

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析

那麼如果我們非要做跨域重定向呢?這也是可以實作的,普通的ajax請求不行,我們需要通過jsonp的方式,而且需要設定crossDomain:true,可以參考https://api.jquery.com/jQuery.ajax/  關于jquery.ajax方法的crossDomain 參數的說明

跨域redirect執行個體:

test.html

<script src="jquery.js"></script>  

<script type="text/javascript">  

var res=$.ajax({  

  type:"get",  

  dataType:"jsonp",/*-----------------------*/  

  url: "http://api.luojisiwei-inc.com/test/test.php?callback=?",  

  crossDomain:true,/*-----------------------*/  

  success: function(data){  

                alert("success:"+data.name);  

        },  

  beforeSend:function(){  

  complete:function(data,status){  

        }  

});  

</script>  

跟test.html同域名下的test.php

<?php  

header("Location:http://video.luojisiwei-inc.com/");//跨域重定向  

http://video.luojisiwei-inc.com/index.php

echo "aaaaaaaaaa";  

setcookie("vtest","ooooooooooo");//跨域設定cookie  

die;  

通路test.html,在firebug下看到請求的結果

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析

然後浏覽器中通路http://video.luojisiwei-inc.com,發現該域名下确實有了個叫vtest的Cookie

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析

可以先看下這邊文章:http://blog.chinaunix.net/uid-25508399-id-3431705.html

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析

$.ajax({  

  url: "http://sso.jd.com/setCookie?t=sso.minitiao.com&callback=?",/*-----------------------*/  

請求的結果是這樣的:

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析

可以看到傳回一個重定向的Response,而且是跨域的重定向,由于發起的是跨域的jsonp請求,是以浏覽器會根據傳回的重定向url發起一次請求,也就是最後的跨域設定Cookie的請求

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析

傳回的Response header中含有Set-Cookie項,這樣就在sso.minitiao.com域名下設定了Cookie,可以打開sso.minitiao.com發現确實有了ceshi3.com這樣一個Cookie

SSO單點登入、跨域重定向、跨域設定Cookie、京東單點登入執行個體分析