📜  HTTP 标头 |设置Cookie(1)

📅  最后修改于: 2023-12-03 14:42:00.422000             🧑  作者: Mango

HTTP 标头:设置 Cookie

什么是 Cookie?

Cookie 是在客户端(一般是浏览器)存储的小文件,用于跟踪用户状态、记录用户首选项和存储其他有关用户的信息。

如何在 HTTP 标头中设置 Cookie?

HTTP 标头中的 'Set-Cookie' 标头可以用于在浏览器中设置 Cookie。它的语法如下:

Set-Cookie: <name>=<value>[; <expires-date>][; <path>][; <domain>][; secure][; HttpOnly]

其中:

  • name 代表了 Cookie 名称,必须设置(不能包含空格、逗号、分号等ASCII字符)
  • value 代表了 Cookie 值,必须设置(可以包含任何ASCII字符)
  • expires-date 代表了 Cookie 过期时间,它有以下三种格式:
    • Wdy, DD-Mon-YY HH:MM:SS GMT 例如:'Sun, 12 Nov 2023 20:12:55 GMT'
    • Max-Age=seconds 例如:'Max-Age=31536000' (1年)
    • Expires=date 例如:'Expires=Wed, 21 Oct 2026 07:28:00 GMT'
  • path 代表了 Cookie 生效的路径,默认为当前文档路径
  • domain 代表了 Cookie 生效的域名,默认为当前文档的域名
  • secure 表示 Cookie 只能通过 HTTPS 协议传输
  • HttpOnly 表示 Cookie 只能通过 HTTP 请求,不能通过 JavaScript 访问,以提高安全性
示例

以下是一个简单的例子,展示了如何在 HTTP 响应中设置 Cookie:

HTTP/1.1 200 OK 
Set-Cookie: username=Roger; Expires=Wed, 31 Oct 2029 16:29:55 GMT; Path=/; Domain=example.com; Secure; HttpOnly
Content-Type: text/html; charset=UTF-8

<html>
  <body>
    <p>Hello World</p>
  </body>
</html>

在这个例子中,我们设置了 Cookie 的名称为 'username',值为 'Roger'。过期时间是 'Wed, 31 Oct 2029 16:29:55 GMT'。Cookie 是在 example.com 域内生效的,并且只能在使用 HTTPS 协议访问时传输。路径是 '/',也就是整个网站都生效。设置了 HttpOnly 以提高安全性。

注意事项
  • 如果在相同域名下存在多个同名 Cookie,经常会有一些问题发生。为了避免这个问题,我们可以设置 Cookie 的 domain 属性,将其限制为 Cookie 生效的域名。
  • 一般情况下,我们不需要手动删除 Cookie。当 Cookie 过期或者被浏览器主动删除时,Cookie 将被自动删除。但是,如果你需要删除 Cookie,你可以设置其 expires date 为过去时间,例如 'Expires=Thu, 01 Jan 1970 00:00:01 GMT'。
  • 在某些情况下,由于 Cookie 的大小限制,我们不得不对 Cookie 进行分割。如果要对 Cookie 分割,请设置其值为分割后的值列表,例如 'name=value1&name=value2'。
参考文献