简介
在Web开发中,Cookie是一种在客户端存储数据的技术,用于跟踪用户会话、记录用户偏好设置等。Cookie由多个属性组成,每个属性都有特定的作用。以下是常见的Cookie属性及其作用:
-
Name(名称)
Cookie的名称。它是Cookie的唯一标识符,用于在服务器和客户端之间传递数据。 -
Value(值)
Cookie的值。它是与Cookie相关联的数据,可以是字符串、数字或其他格式的数据。 -
Domain(域)
Cookie的域。指定可以访问Cookie的域名。如果未指定域,则默认为设置Cookie的页面所在的域名。 -
Path(路径)
Cookie的路径。指定可以访问Cookie的路径。如果未指定路径,则默认为设置Cookie的页面所在路径。 -
Expires(过期时间)
Cookie的过期时间。指定Cookie的有效期。一旦超过过期时间,Cookie将被删除。如果未设置过期时间,则Cookie将成为会话Cookie,仅在用户关闭浏览器时失效。 -
Max-Age(最大年龄)
Cookie的最大年龄。以秒为单位指定Cookie的生存期。与Expires不同,Max-Age指定的是Cookie在被创建后的一段时间内有效,而不是指定一个具体的过期日期。 -
Secure(安全标志)
指定是否只有在安全连接(HTTPS)下才能传输Cookie。设置了Secure属性的Cookie只能在加密的传输协议下被发送到服务器。 -
HttpOnly
指定Cookie是否可通过客户端脚本访问。如果设置了HttpOnly属性,客户端脚本(如JavaScript)将无法通过document.cookie来访问该Cookie,这有助于防止跨站脚本攻击(XSS)。 -
SameSite
指定Cookie的SameSite策略,用于防止跨站请求伪造(CSRF)攻击。SameSite属性可以设置为"Strict"、“Lax"或"None”,分别代表严格模式、宽松模式和不使用SameSite策略。
设置Cookie
服务端可以通过增加响应头的方式添加cookie
Set-Cookie: sessionId=abc123; Domain=example.com; Path=/; Max-Age=3600; Secure; HttpOnly; SameSite=Strict
javascript也可以直接操作cookie
// 添加cookie,执行后cookie值会变成existingCookie=existingValue; newCookie=newValue
document.cookie = "newCookie=newValue";
// 通过设置Cookie的过期时间为一个过去的时间点,达到删除cookie的效果
document.cookie = "cookieName=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;";
cookie共享
cookie只能在同一个域名下进行访问,因此cookie共享也只能在同一个域名下才能进行共享。cookie写入到某个域名后,它以及它的子域名便都可以访问。
例如,.example.com或者example.com下写入了一个cookie,那么可以被 x.example.com 或者 x.y.example.com等子域名访问。
需要注意的是,如果没有带Secure属性,则这个cookie可以被http和https协议同时访问,如果带了Secure,则只能被https协议访问。