为什么 cookie 和会话需要在 HTML 之前出现?

Why do cookies and sessions need to come before any HTML?

此外,为什么白色 space 灵敏度?如果 JavaScript 可以在 HTML 加载后添加 cookie,那么我猜他们的操作方式有根本不同,但我什至无法很好地猜测原因。

HTTP 响应由 header 和(可选,取决于 header)body。

使用 HTTP headers 设置 Cookie。

HTML 文档(任何其他任何实际内容)在 body.

中发送

header 必须在 body 之前发送。这可以通过以下方式完成:

  • 运行 输出它们的代码在输出 body
  • 的代码之前
  • 缓冲 PHP 程序的输出,直到它完成 运行

And additionally, why the white space sensitivity?

空格在 HTTP 响应正文中并不特殊。它像任何其他内容一样输出。


If JavaScript can add cookies after HTML has loaded, then I would guess there is something fundamentally different about how they do it

他们不使用 HTTP headers 来设置它们。

WWW 服务器将数据分段发送到您的浏览器。第一部分是一些通常称为 HTTP Headers 的文本。它们定义内容的类型、大小、语言、编码,服务器也发送一些关于它自己的信息。 Cookies 也发送到这里,因为这是 "off-site" 信息的地方。

会议有点不同。他们是服务器端。所以你需要在服务器开始渲染内容并将其发送到客户端浏览器之前声明 session 。另一个原因是您的 session 标识符是……一个 cookie!所以是的,如果没有 cookie,session 将无法工作。

Cookie 是客户端(浏览器端)的小文本文件。 JavaScript 是在您的浏览器中运行的 client-side(浏览器端)脚本。所以它没有使用 HTTP 来联系您实际观看的网站页面。无需使用 HTTP Headers 之类的东西。如果程序在您的计算机上运行,​​那么在计算机上修改这些文件会更好、更容易,不是吗?

这就是 JavaScript 不使用 HTTP Headers 修改 cookie 文件的原因。它只是通知您的浏览器它想要修改这个那个,然后浏览器会这样做。

更多信息见Manual