我在同一域上进行$.ajax
请求,想要读取cookie。但它一直返回null
。
$.ajax({
type: 'GET',
url: myUrl,
success: function(output, status, xhr) {
alert(xhr.getResponseHeader("MyCookie"));
},
cache: false
});
有什么想法吗?我正在使用Chrome。
我在同一域上进行$.ajax
请求,想要读取cookie。但它一直返回null
。
$.ajax({
type: 'GET',
url: myUrl,
success: function(output, status, xhr) {
alert(xhr.getResponseHeader("MyCookie"));
},
cache: false
});
有什么想法吗?我正在使用Chrome。
出于安全原因,浏览器无法访问第三方cookie,例如从ajax请求中收到的cookie,但是它会自动为您处理这些cookie!
为了使其工作,您需要执行以下操作:
1)使用您期望返回cookie的ajax请求进行登录:
$.ajax("https://example.com/v2/login", {
method: 'POST',
data: {login_id: user, password: password},
crossDomain: true,
success: login_success,
error: login_error
});
2) 在下一个Ajax请求中使用xhrFields: { withCredentials: true }
连接来使用浏览器保存的凭据
$.ajax("https://example.com/v2/whatever", {
method: 'GET',
xhrFields: { withCredentials: true },
crossDomain: true,
success: whatever_success,
error: whatever_error
});
尽管这些cookie无法从headers
或document.cookie
读取,但浏览器会为您管理它们。
您正在寻找响应头 Set-Cookie
:
xhr.getResponseHeader('Set-Cookie');
然而,它在使用HTTPOnly cookie时无法工作。
根据XMLHttpRequest Level 1和XMLHttpRequest Level 2,这个特定的响应头属于被禁止获取的响应头之一,您可以使用getResponseHeader()
来获取,所以唯一能够使其工作的原因就是“顽皮”的浏览器。
Set-Cookie
。这是该列表的链接:https://fetch.spec.whatwg.org/#forbidden-header-name - Kostas Filiosxhr.getResponseHeader('Set-Cookie');
对我来说这不起作用。
我使用这个
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length,c.length);
}
return "";
}
success: function(output, status, xhr) {
alert(getCookie("MyCookie"));
},
和yebmouxing一样,我也无法理解这个
xhr.getResponseHeader('Set-Cookie');
方法无效。即使我在服务器上将HTTPOnly设置为false,它也只会返回null。
我也编写了一个简单的js帮助函数来从文档中获取cookie。这个函数非常基本,只有在您自己知道附加信息(寿命、域、路径等等)时才能起作用:
function getCookie(cookieName){
var cookieArray = document.cookie.split(';');
for(var i=0; i<cookieArray.length; i++){
var cookie = cookieArray[i];
while (cookie.charAt(0)==' '){
cookie = cookie.substring(1);
}
cookieHalves = cookie.split('=');
if(cookieHalves[0]== cookieName){
return cookieHalves[1];
}
}
return "";
}