天天看点

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、京东单点登录实例分析