我通过设置 HTTP header 在服务器上手动创建 cookie,如下所示:
Status: 200 OK
Set-Cookie: downloadDone=3196
Content-type: application/octet-stream
Content-disposition: attachment; filename="foo"
我可以在 Chrome 和 FF 调试器上确认传入 header 也如下所示。但是,我无法从 Javascript 读取此 cookie。 document.cookie
为空,Chrome 调试器也将其显示为空:
document: document
cookie: ""
Chrome 和 FF 都确实实际设置了 cookie。他们甚至在下一个请求时将其发送回服务器;调试器在请求 header 中显示这一点:
Cookie:downloadDone=3196
我认为任何一个浏览器都不会认为 HttpOnly
已设置,但是两个调试器似乎都在 cookie 上不稳定,所以我可能是错的。
知道为什么我在 document.cookie
中看不到这个吗?
最佳答案
已修复,但我对此不满意。 Firefox 和 Chrome 都需要非默认 Path
才能使 Cookie 对 Javascript 可见。这不起作用:
Status: 200 OK
Set-Cookie: downloadDone=3196; Max-Age=3600
Content-type: application/octet-stream
Content-disposition: attachment; filename="foo"
但这确实有效:
Status: 200 OK
Set-Cookie: downloadDone=3196; Path=/; Max-Age=3600
Content-type: application/octet-stream
Content-disposition: attachment; filename="foo"
在发送Path
之前,FF cookie浏览器显示默认路径为/cgi-bin/
,并且document.cookie
为空。添加路径后,cookie 浏览器正确显示 /
路径,并且 document.cookie
现在神奇地显示 cookie。我在任何地方的 RFC 中都找不到这个。至少有一份 RFC 明确指出 name=value
就足够了。
关于Javascript:看不到服务器cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24195125/