name 字段为一个 cookie 的名称。
value 字段为一个 cookie 的值。
domain 字段为可以访问此 cookie 的域名。
- 非顶级域名,如二级域名或者三级域名,设置的 cookie 的 domain 只能为顶级域名或者
二级域名或者三级域名本身,不能设置其他二级域名的 cookie,否则 cookie 无法生成。
顶级域名只能设置 domain 为顶级域名,不能设置为二级域名或者三级域名,否则 cookie
无法生成。 - 二级域名能读取设置了 domain 为顶级域名或者自身的 cookie,不能读取其他二级域名
domain 的 cookie。所以要想 cookie 在多个二级域名中共享,需要设置 domain 为顶级域
名,这样就可以在所有二级域名里面或者到这个 cookie 的值了。
顶级域名只能获取到 domain 设置为顶级域名的 cookie,其他 domain 设置为二级域名的
无法获取。
path 字段为可以访问此 cookie 的页面路径。 比如 domain 是 abc.com,path 是/test,那么只
有/test 路径下的页面可以读取此 cookie。
expires/Max-Age 字段为此 cookie 超时时间。若设置其值为一个时间,那么当到达此时间
后,此 cookie 失效。不设置的话默认值是 Session,意思是 cookie 会和 session 一起失效。
当浏览器关闭(不是浏览器标签页,而是整个浏览器) 后,此 cookie 失效。
Size 字段 此 cookie 大小。
http字段 cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie
的信息,而不能通过 document.cookie 来访问此 cookie。
secure 字段 设置是否只能通过 https 来传递此条 cookie
Cookie的实现原理
Cookie是一种客户端会话技术,它允许服务器在用户的本地浏览器存储数据。这些数据被存储为键值对,并且可以包含一些属性来控制Cookie的行为。Cookie主要用于以下目的:
- 会话状态管理:如用户登录状态、购物车等。
- 个性化设置:如用户偏好、主题等。
- 浏览器行为跟踪:用于分析用户行为。
HTTP协议本身是无状态的,但通过Cookie,服务器能够识别并保持与客户端的会话状态。当用户访问一个支持Cookie的网站时,服务器可以发送一个Set-Cookie响应头,浏览器接收后会将Cookie保存起来,并在之后对该服务器的每次请求中,通过请求头中的Cookie字段发送给服务器。
安全处理
由于Cookie存储在客户端,它们可能会被篡改或读取,因此安全处理非常重要:
- HTTPS:使用HTTPS协议确保Cookie在传输过程中的安全。
- HttpOnly属性:设置HttpOnly属性可以防止Cookie通过JavaScript读取,减少XSS攻击的风险。
- Secure属性:设置Secure属性确保Cookie只在HTTPS连接中传输。
- SameSite属性:该属性可以设置为Strict或Lax,以减少跨站请求伪造(CSRF)攻击的风险。
- 避免敏感信息泄露:不要在Cookie中存储敏感信息,如密码或个人信息。
- 设置合适的Domain和Path:限制Cookie的作用域,避免不必要的Cookie传输。
使用案例
以下是一些使用Cookie的常见案例:
-
自动填充登录框:如京东网站,登录后浏览器会存储用户名的Cookie,当用户再次访问登录页面时,用户名会被自动填充。
-
会话管理:服务器发送包含用户会话标识的Cookie,之后用户的每次请求都会携带这个标识,服务器通过这个标识管理用户的会话状态。
-
个性化设置:网站可以根据用户存储在Cookie中的偏好设置,调整网站界面或内容,如主题、语言等。
-
购物车实现:电商平台使用Cookie来追踪用户的购物车内容,即使用户关闭浏览器后再次访问,购物车内容依然存在。
-
用户跟踪:网站可以使用Cookie来跟踪用户的访问行为,如访问页面、停留时间等,用于分析和优化用户体验。
-
安全性实现:例如在Express框架中,使用
cookie-parser
中间件来解析请求中的Cookie,并安全地设置新的Cookie。 -
跨域Cookie共享:通过设置合适的Domain属性,可以实现子域名间的Cookie共享,但需要注意安全风险。
-
Cookie有效期管理:通过设置Expires或Max-Age属性,可以控制Cookie的生命周期,如会话结束时删除或设置一个具体的过期时间。
通过合理使用和管理Cookie,可以提升用户体验并增强应用程序的功能性,但同时也要注意保护用户的隐私和数据安全。