我正在尝试使用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- CredentialsHTTP标头设置为true)。
Access-Control-Allow- Credentials
true
毫无疑问,它有效。您可以通过HTTPS,Basic Auth等方式进行操作。如果您告诉(xhrFields),并且网站提供了正确的CORS标头,则jQuery会发送所有内容(auth标头,cookie)。不要放弃!