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