跨域传递cookie

cookie基本使用
首先,需要在服务端返回的头部信息中增加:
 response.setHeader(“Access-Control-Allow-Origin”,“http://b.test.com”);
  
CORS请求默认不发送Cookie和HTTP认证信息。如果要把Cookie发到服务器,一方面要服务器同意,指定Access-Control-Allow-Credentials字段。

Access-Control-Allow-Credentials: true

另一方面,开发者必须在AJAX请求中打开withCredentials属性。

js:
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

jq:
 document.cookie=“pin=test;domain=test.com;”;
    $.ajax({
       url:_url,
       type:"get",
       data:"",
        dataType:"json",
       xhrFields: {
          withCredentials: true
       },
       crossDomain: true,

否则,即使服务器同意发送Cookie,浏览器也不会发送。或者,服务器要求设置Cookie,浏览器也不会处理。
  需要注意的是,如果要发送Cookie,Access-Control-Allow-Origin就不能设为星号,必须指定明确的、与请求网页一致的域名。同时,Cookie依然遵循同源政策,只有用服务器域名设置的Cookie才会上传,其他域名的Cookie并不会上传,且(跨源)原网页代码中的document.cookie也无法读取服务器域名下的Cookie。

这里纠正一个误区,不是设置了cookie的domain参数,cookie就可以被跨域传输的。 其实,cookie的domain属性所说的跨域,确切地说,应该是跨子域(subdomain)。比如我在bbs.readlog.cn这个子域(这里是二级域名)下设置的cookie,如果不特别的设置domain属性,那这个cookie就只能被bbs.readlog.cn这个子域下的程序读到,至于www.readlog.cn是无法读取到这个cookie的,而我如果在bbs.readlog.cn设置cookie的时候,设置cookie的domain属性为readlog.cn,那么所有的子域就都可以读到这个cookie了。 其实仔细想一下,也会知道所谓跨域A.com去读取B.com的cookie仅仅通过cookie的domain属性是行不通的,如果这样是可以的,那无疑是一个巨大的安全隐患。

关于cookie的domain属性详解:

  1. 在任何域名下,cookie的domain参数都只能指定为当前域名或上级域名(包括上级的上级,等等),此外都是无效的。
    如:在t.a.b.com下,指定domain为t.a.b.coma.b.com、b.com都是可行的。
  2. 在domain的参数前,是否存在符号“.”是完全相同的。
    如:domain=a.b.com和domain=.a.b.com是完全相同的。
  3. 脚本只可访问domain参数设置为当前域名或上级域名(包括上级的上级,等等)的cookie,以及当前域名下设置的没有domain参数的
    cookie。
  4. 如果不指定domain,则cookie无法在其他任何域名下被访问,即使是子域名。
  5. 指定domain与不指定domain的cookie是不相同的,即使下面的情况所产生的cookie也是不同的:
    case1:在a.b.com下,设置无domain参数的cookie。
    case2:在a.b.com下,设置domain=a.b.com的cookie。
    case1和case2所生成的cookie是完全不同的。
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值