Javascript:看不到服务器cookie

标签 javascript cookies cgi

我通过设置 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/

相关文章:

javascript - a.b < 0,为什么当 a.b === undefined 时不会抛出错误?

javascript - Android 上 HTML 5 的设备方向问题

javascript - 加载时不显示 Angular 数据

javascript - 使用扩展运算符将对象插入数组?

cookies - Owin cookie 身份验证设置-cookie 未保存在浏览器中

javascript - 多页 Javascript 样式表更改器仅更改一个子页面中的样式表,而不是所有子页面中的样式表

html - 无法将文本从 html 文件发送到 c 文件

Perl WWW::Mechanize cookie 问题

javascript - 如何使用 XMLHttpRequest ajax 将值从 cgi Cpp 返回到 HTML?

linux - Gnu Plot 中百分比的位置和大小不正确