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 - 使用 ExtJS 选择不包含特定 ID 的元素

javascript - 为什么函数组合在 Javascript 中是从右到左组合的?

php - Opera Mini 和 PHP session

mysql - 数据库驱动应用程序中的 Has_Many、Belongs_To 关系

perl - MySQL 连接在 Perl CGI 脚本中无法工作

php - 当用户提交表单时,如何提交到 iframe 并在主页上显示结果?

javascript - 重新排序从 PHP 数组呈现的 HTML

javascript - 在 javascript 中访问和迭代 json

javascript - 我需要从浏览器中获取所有 cookie

python - 当尝试执行cgi脚本时,出现错误: "[WinError 193] %1 is not a valid Win32 application"