30

我正在尝试使用 XMLHttpRequest 在 XSS 请求中设置 Cookie。

我找到了XMLHttpRequest Specification,第 4.6.2-5 节似乎确实建议不允许设置 Cookie、Cookie2 和其他一些标头,但我希望有一个解决方法。

我的(jQuery)代码如下,但由于未设置 cookie,结果查询失败。

$.ajax( {
  type : "POST",
  url : URL,
  data: SOAP_INBOX_MAIL_QUERY,
  dataType : "xml",
  async: false,
  beforeSend : function(xhr) {  
    var cookie = credentials["COOKIE"];
    console.info( "adding cookie: "+ cookie );          
    xhr.setRequestHeader('Cookie', cookie);
  },
  success : function(data, textStatus, xmLHttpRequest){


  },
  error : function(xhr, ajaxOptions, thrownError) {
    credentials = null;
  }
});
4

5 回答 5

40

这是可以做到的。您在 $.ajax 调用中需要以下内容:

xhrFields: {
    withCredentials: true
}

(请参阅 jQuery 文档),并且您还需要您提出请求以支持 CORS 的站点(它们至少需要允许您起源并将Access-Control-Allow-CredentialsHTTP 标头设置为true)。

毫无疑问,它有效。您可以通过 HTTPS、Basic Auth 等进行。如果您告诉(xhrFields),jQuery 将发送所有内容(auth 标头、cookie)并且该站点提供正确的 CORS 标头。不要放弃!

于 2011-12-16T05:44:31.563 回答
15

出于安全原因,您将无法在 XMLHTTPRequest 期间修改标头。

于 2010-02-23T17:09:34.497 回答
4

如果您使用 document.cookie 设置 cookie,那么当您发送请求时,cookie 标头将包含它。

于 2011-08-16T08:44:54.757 回答
1

https://developer.mozilla.org/En/Server-Side_Access_Control

允许您起源并将 Access-Control-Allow-Credentials HTTP 标头设置为 true

于 2012-02-16T09:03:51.150 回答
0

如果您的请求与 jquery 代码在同一个域,您可以使用 jquery cookies 插件

于 2010-02-23T17:10:29.613 回答