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

时间:2010-02-23 17:05:48

标签: javascript jquery ajax jqxhr

我正在尝试使用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 个答案:

答案 0 :(得分:33)

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

xhrFields: {
    withCredentials: true
}

(请参阅jQuery文档),您还需要提供支持CORS的请求的网站(他们至少需要允许您来源并设置Access-Control-Allow-Credentials HTTP标头到true)。

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

答案 1 :(得分:14)

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

答案 2 :(得分:3)

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

答案 3 :(得分:1)

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

  

允许您创建并且还将Access-Control-Allow-Credentials HTTP标头设置为true

答案 4 :(得分:0)

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