入门客AI创业平台(我带你入门,你带我飞行)
博文笔记

SSO单点登录、跨域重定向、跨域设置Cookie、京东单点登录实例分析

创建时间:2014-03-03 投稿人: 浏览次数:115

最近在研究SSO单点登录技术,其中有一种就是通过js的跨域设置cookie来达到单点登录目的的,下面就已京东商城为例来解释下跨域设置cookie的过程

涉及的关键知识点:

1、jquery ajax跨域重定向,要理ajax解跨域重定向,先要了解浏览器对重定向的处理。正常我们请求一个地址,如果server返回302,那么浏览器会再发起一次重定向后的http请求;用jquery ajax发起一次异步请求,server返回302,如果重定后url的域名跟ajax请求的域名是同一个域名的话,浏览器会再发起一次重定向后的http请求,请求成功会调用ajax的success函数,如果重定向后url的域名跟ajax请求的域名不是同一个域名,也就是跨域重定向(跨域redirect),这个时候浏览器看到返回的response的Location跨域了就不会再发起请求,请求被拦截了,ajax请求失败会调用error方法

那么如果我们非要做跨域重定向呢?这也是可以实现的,普通的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下看到请求的结果

客户端先给test.php发ajax请求,然后被重定向到http://video.luojisiwei-inc.com下,并且返回一个Set-Cookie的Response,这样就实现了跨域重定向和跨域设置Cookie

然后浏览器中访问http://video.luojisiwei-inc.com,发现该域名下确实有了个叫vtest的Cookie


京东商城跨域设置Cookie实现SSO单点登陆过程

可以先看下这边文章:http://blog.chinaunix.net/uid-25508399-id-3431705.html
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。