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

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

我找到了XMLHttpRequest规范 ,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; } }); 

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

 xhrFields: { withCredentials: true } 

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

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

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

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

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

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

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