2014-10-09 103 views
0

我试图发送一个跨域AJAX请求,但我似乎无法获得身份验证cookie来标记。请求将从www.site.com/path发送到api.site.com/other/path。 cookie的详细信息包括:Cookie未与AJAX请求一起发送

域:.site.com 路径:/ 发送:各种连接 可通往脚本:是

而这里的AJAX请求:

$.ajax({ 
    type  : 'POST', 
    url   : 'http://api.site.com/path', 
    contentType : "application/json", 
    xhrFields : { 
     withCredentials: true 
    }, 
    crossDomain : true, 
    beforeSend : function(xhr) { 
     xhr.withCredentials = true 
    }, 
    data  : JSON.stringify({ 
     'user_id' : 'id' 
    }), 
    success  : function() { 
     alert('success'); 
    }, 
    error  : function(jqXHR, textStatus, errorThrown) { 
     alert('error'); 
    } 
}); 

我控制着cookie的创建和使用。显然,上面的一些细节是多余的,但我一直在尝试我可以没有成功的一切。如果可能的话,我很乐意将cookie返回给HttpOnly。我真的认为我可以解决这个问题,但我显然错过了一些东西。非常感谢你的帮助!

回答

0

尝试以下操作:

  1. 编写一个驻留在域B和转发你的请求域的一个小的代理。您的浏览器将允许您调用代理,因为它与调用脚本位于同一台服务器上。

  2. 然后可以将此代理配置为接受它可以发送到域-a的cookie名称和值参数。但为了实现这一点,您需要知道cookie的名称并在域上对您的服务器进行评估 - 我们希望进行身份验证。

  3. 如果您正在提取JSON对象,请尝试改为使用JSONP请求。 jQuery支持这些。但是你需要在domain-a上改变你的服务,以便它返回有效的JSONP响应。

告诉我,如果它的工作。如果不是,我会寻找另一种解决方案。