如何使用JavaScript中的XMLHttpRequest设置Cookie(标头)?

如何使用JavaScript中的XMLHttpRequest设置Cookie(标头)?,javascript,jquery,ajax,jqxhr,Javascript,Jquery,Ajax,Jqxhr,我正在尝试使用XMLHttpRequest在XSS请求中设置Cookie 我发现了,第4.6.2-5节似乎建议不允许设置Cookie、Cookie2和其他一些标题,但我希望有一个解决办法 下面是我的(jQuery)代码,但由于未设置cookie,因此结果查询失败 $.ajax( { type : "POST", url : URL, data: SOAP_INBOX_MAIL_QUERY, dataType : "xml", async: false, beforeSen

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

我发现了,第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;
  }
});

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

如果您的请求与jquery代码位于同一域,则可以使用jquery

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

这可以完成。在$.ajax调用中需要以下内容:

xhrFields: {
    withCredentials: true
}
(请参阅jQuery文档),您还需要向其发出请求的站点来支持CORS(它们至少需要允许您使用源代码,并将
访问控制允许凭据设置为
true

毫无疑问,它是有效的。您可以通过HTTPS、基本身份验证等方式完成。如果您告诉(xhrFields),jQuery将发送所有内容(身份验证头、cookies),并且站点提供正确的CORS头。不要放弃

允许您将源代码和访问控制允许凭据HTTP头设置为true


不幸的是,据我所知,情况似乎确实如此。感谢您的确认。这应该是可接受的答案,因为OP要求使用JavaScript在请求上设置cookie,而不是服务器在响应上设置cookie设置“withCredentials”将我域的所有cookie添加到xhr请求中。谢谢你的提示!注意服务器不能说“访问控制允许来源:”。Chrome(也怀疑其他浏览器)会简单地取消GET.Down投票,因为你对错误的问题有了正确的答案,请注意OP似乎想在请求中用JavaScript设置cookie,大概是在browser.Cf中,我正在尝试使用XMLHttpRequest在XSS请求中设置Cookie。在vanilla js中如何设置?我做了一组关于Cookie的教程,其中一个只是关于使用javascript和Cookie。从开始了解cookie的一般情况,然后它有一个页面链接,该页面介绍如何从浏览器通过javascript访问cookie,以及如何从服务器通过php访问cookie。值得注意的是,有些平台/环境似乎不与XmlHttpRequests(XHR)共享document.cookie。因此,如果您需要在文档和XHR之间共享cookie,例如,通过会话cookie实现会话状态持久化,则会引发问题。对于Safari浏览器扩展和MacOSX小部件来说,这似乎也是如此。适用于Chrome扩展、WindowsVista/7小工具等。我不知道苹果为什么要这么严格。遗憾的是,对于我提出的为什么会这样或如何解决这一问题,没有人能找到解决方案或答案。为了补充我之前的评论,(PHPSESSID)会话cookie设置在document.cookie中(和/或获取某些数据的初始XHR请求)。后续的XHR回发数据应该沿着该会话cookie传递。在Chrome和Windows gadget中,这一功能自动运行良好(无需手动处理cookie)。它在Safari和MacOSX小部件中不起作用。我尝试用document.cookie手动设置cookie请求头,但没有成功(尽管我没有检查document.cookie是否有所需的cookie,这将是苹果的另一个问题)。