如何从AJAX响应获取cookie?
我在同一个域上有$.ajax
请求,我想读取cookie。 它保持返回null
。
$.ajax({ type: 'GET', url: myUrl, success: function(output, status, xhr) { alert(xhr.getResponseHeader("MyCookie")); }, cache: false });
有任何想法吗? 我为此使用了Chrome。
您正在寻找Set-Cookie
的响应标题:
xhr.getResponseHeader('Set-Cookie');
它不会使用HTTPOnly cookies。
更新
根据XMLHttpRequest Level 1和XMLHttpRequest Level 2 ,这个特定的响应标题位于可以使用getResponseHeader()
获得的“禁止”响应标题下,所以这可以起作用的唯一原因基本上就是一个“淘气”的浏览器。
浏览器不能访问第三方cookie,如从安全原因的ajax请求接收的第三方cookie, 但它会自动为您处理!
为了这个工作,你需要:
1)用您希望返回cookie的ajax请求login:
$.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 });
即使浏览器无法从头headers
或document.cookie
读取,浏览器也会为您处理这些Cookie
xhr.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是非常基本的,只有当你知道额外的信息(寿命,域名,path等等)来添加你自己时才有效:
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 ""; }