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

IT技术 javascript jquery ajax jqxhr
2021-03-10 20:51:05

我正在尝试使用 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;
  }
});
5个回答

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

xhrFields: {
    withCredentials: true
}

(请参阅 jQuery 文档),并且您还需要您请求支持 CORS 的站点(他们至少需要允许您使用 origin 并将Access-Control-Allow-CredentialsHTTP 标头设置true)。

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

设置“withCredentials”将我域的所有 cookie 添加到 xhr 请求中。谢谢你的提示!
2021-04-30 20:51:05
投反对票,因为您对错误的问题有正确的答案,请注意,OP 似乎想在请求中使用 JavaScript 设置 cookie,大概是在浏览器中。Cf 我正在尝试使用 XMLHttpRequest 在 XSS 请求中设置 Cookie .
2021-05-08 20:51:05
注意服务器不能说“Access-Control-Allow-Origin:*”。Chrome(也怀疑其他浏览器)只会取消 GET。
2021-05-18 20:51:05
我将如何在 vanilla js 中做到这一点?
2021-05-19 20:51:05

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

这应该是公认的答案,因为 OP要求使用 JavaScript请求上设置 cookie,而不是让服务器在响应上设置 cookie
2021-04-28 20:51:05
不幸的是,从我的阅读来看,情况似乎确实如此。谢谢确认。
2021-05-20 20:51:05

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

要添加到我之前的评论中,(PHPSESSID) 会话 cookie 设置在 document.cookie(和/或初始 XHR 请求以获取一些数据)中。后续回发数据的 XHR 应传递该会话 cookie。在 Chrome 和 Windows 小工具中,它自动运行良好(无需手动处理 cookie)。它在 Safari 和 Mac OS X 小部件中不起作用。我尝试使用 document.cookie 手动设置 cookie 请求标头,但没有奏效(尽管我没有检查 document.cookie 是否具有所需的 cookie,这将是 Apple 的一个单独问题)。
2021-04-23 20:51:05
仅供参考,有趣的是,某些平台/环境似乎不与 XmlHttpRequests (XHR) 共享 document.cookie。因此,如果您需要在文档和 XHR 之间共享 cookie,则会导致问题,例如,通过会话 cookie 进行会话状态持久化。发现对于 Safari 浏览器扩展和 Mac OS X 小部件来说似乎如此。适用于 Chrome 扩展、Windows Vista/7 小工具等。不知道为什么 Apple 必须如此严格。遗憾的是,对于我为什么会这样或如何解决这个问题,没有人有解决方案或答案。
2021-04-28 20:51:05
我做了一组关于 cookie 的教程,其中一个只是关于使用 javascript 和 cookie。dbp-consulting.com/tutorials/web/cookieintro.html开始了解 cookie 的一般信息,然后它有一个页面的链接,该页面关于使用来自浏览器的 javascript 和来自服务器的 php 访问它们
2021-05-04 20:51:05

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

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

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