在JavaScript中,是否可以从HTTP响应头中获取Set-Cookie值?

7
我正在使用jQuery的ajax()方法进行一些异步服务器调用,并希望捕获因会话超时而失败的情况。
从查看响应头来看,在这种情况下,我发现它们包括:
Set-Cookie: SMSESSION=LOGGEDOFF

这似乎是一个相当可靠的测试。但是,在调用传递给jQuery的error回调函数的XMLHttpRequest对象上调用getAllResponseHeaders显然会返回一个空字符串,我很难想出其他获取标头信息的方法。

这可能吗?


1
https://dev59.com/EHVC5IYBdhLWcg3wqzHV - quantumSoup
1
@zzzz:我也有类似的想法...不过好像只有在回调函数被调用之后才会发生这种情况,我说的对吗?如果是这样的话,我想我可以在complete回调函数中使用一些setTimeout的方法来解决。 - Dan Tao
3
根据这个规范(http://www.w3.org/TR/XMLHttpRequest/#the-getresponseheader-method),`getAllResponseHeaders()` 方法将返回除了 Set-Cookie 标头以外的所有标头。要获取 cookie,您需要通过 cookie 接口进行操作。 - jfriend00
1
@jfriend00:不幸的是,我看到的情况似乎是:(1)getAllResponseHeaders()返回""(可能是jQuery在做这个事情?);和(2)所涉及的cookie实际上没有被浏览器更新。我不太理解HTTP,不知道为什么,尽管我可以说这个cookie是安全的,而且还没有过期。无论如何,令人沮丧的是,我无法从响应头中获取Set-Cookie的值,因为这才是我真正关心的(即,如果服务甚至*试图将cookie设置为LOGGEDOFF,那么我就想知道这一点)。你知道这是出于安全考虑吗? - Dan Tao
在服务器上设置“Access-Control-Allow-Credentials: true”头,并在进行ajax请求时传递“xhrFields: { withCredentials: true }”。 - Cem
显示剩余4条评论
2个回答

2
如果您阅读W3 XHR规范,您会发现它们不允许您通过调用getAllResponseHeaders('Set-Cookie')来访问set-cookie响应头。请参见4.7.3中的getResponseHeader()方法:
第三个小点:“如果header是Set-Cookie或Set-Cookie2的大小写不敏感匹配,则返回null。”

http://www.w3.org/TR/XMLHttpRequest/#the-getallresponseheaders%28%29-method

“jfriend00在上面的评论中也留下了这个回答,但我认为这个问题需要一个合法的答案。”

-2

如果文档来自相同的域和路径,请使用document.cookie接口。 如果cookie设置了http-only属性,则无法访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接