【问题标题】:Jquery Ajax CORS + HttpOnly CookieJquery Ajax CORS + HttpOnly Cookie
【发布时间】:2011-09-28 06:26:05
【问题描述】:

我已经让 CORS 处理我当前的项目,尽管我似乎无法正常工作的一件事是 cookie。

现在我得到了 cookie,服务器发出并发送它,firefox 接受它,我可以在 firebug cookie 部分看到它。但是,当我对该服务进行后续调用时,它似乎没有在标头中发送 cookie...

GET /some/entity/ HTTP/1.1
Host: localhost:1837
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:5.0) Gecko/20100101 Firefox/5.0
Accept: */*
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip, deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection: keep-alive
Referer: http://localhost:6879
Origin: http://localhost:6879

我需要对我的 ajax 调用做一些特别的事情吗?

var ajaxOptions = {
    url: serviceResourceUrl,
    type: "get",
    dataType: "json",
    success: successCallback,
    error: failedCallback,
    xhrFields: { withCredentials: true }
};

$.ajax(ajaxOptions);

【问题讨论】:

    标签: jquery ajax cookies cross-domain


    【解决方案1】:

    尝试使用 beforeSend 属性而不是 xhrFields。在你的情况下:

    var ajaxOptions = {
        url: serviceResourceUrl,
        type: "get",
        dataType: "json",
        success: successCallback,
        error: failedCallback,
        beforeSend: function(xhr){
          xhr.withCredentials = true;
        }
    };
    
    $.ajax(ajaxOptions);
    

    你可以在这里了解更多:Sending credentials with cross-domain posts?

    【讨论】:

    • 我最初是想这样做的,但它根本行不通。在 xhrFields: {...} 上看到一篇文章,它为我检索 cookie 工作。将再次尝试其他方法。
    • 刚试了一下,还是不行。 cookie 可以在 firebug 中看到,它具有正确的过期时间和域。在服务上调试时没有 cookie :(
    • 对不起所有的 cmets,但只是仔细检查了域并在 firebug 中报告了 localhost(部分正确),但是开发中的服务实际上在 localhost:1873 上。如果我尝试编辑 cookie 并将该域放入,它只是忽略它并且似乎只保留 localhost。服务器似乎将其正确设置为...所以这可能是 Firefox 的错误吗?
    • 鉴于您的回答,虽然 xhrFields{} 有效,而 beforeSend:... 对我没有用。这里的根本问题是通过不让服务器设置 cookie 域并让客户端推断它来解决的。
    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2019-08-03
    • 2012-06-07
    • 2015-03-19
    • 2017-05-01
    相关资源
    最近更新 更多