一、什么是cookie
Cookie 是通过浏览器(cookie是前后端共享的,cookie肯定是存在浏览器的。)将服务器返回的数据保存在本地的一小块数据(一般小于4kb)。当浏览器发送请求且浏览器存在 Cookie 时,浏览器会自动在请求头携带上 Cookie 数据。
引入 Cookie 的意义是因为 HTTP 的请求是无状态的,如:浏览器发出的请求服务器没办法区分浏览器用户身份以及用户的相关操作状态(可以通过 Cookie 传递这些信息)。
最开始 Cookie 被作为唯一的存储手段,但是因为浏览器的每次请求都会携带上 Cookie,会带来额外的开销,而且存储量比较小,所以后来浏览器推出了新的 Api(web stoeage Api和 indexedDb)。
二、cookie使用的主要场景
- 会话状态管理(如用户登录状态、及其他需要记录的信息)
- 个性化设置(如用户自定义设置)
- 浏览器追踪行为(如追踪分析用户行为)
三、cookie的创建
1.浏览器自动创建
当服务器收到 HTTP 请求时,服务器可以在响应头里设置一个 Set-cookie 选项,浏览器接收到响应后会自动保存下 Cookie,之后浏览器对该服务器的每一次请求中都会通过请求头把 Cookie 信息发送给服务器。
2.通过 js 设置 Cookie (也可以设置过期时间、域名、路径等)
基本用法
// 可以直接在浏览器控制台输入进行测试
document.cookie = "token=dsagsdshj43sfs";
四、Cookie 的设置详解
1.过期时间设置(Expires 字段)
设置 Cookie 30s 后过期
设置 Cookie 30s 后过期
// 30s 后浏览器 cookie 自动清空
res.cookie('token','dsafdsfd453542scdsfd',{expires:new Date(Date.now() + 30*1000)})
2.设置一段时间过期。(Max-Age
设置 Cookie 20s 后过期
res.cookie('token','dsafdsfd453542scdsfd',{maxAge:20*1000})
3.设置域(domain),指定 cookie 在哪个域下可以被接受
注:如果不指定 domain 则默认是当前源(origin),但不包括子域名。如果指定了 Domain 则一般包含子域名(二级域名、三级域名)
res.cookie('token','dsafdsfd453542scdsfd',{domain:'localhost'})
扩展
csdn的html能够访问baidu的cookie吗?
不能,因为cookie是域名的隔离的
www.baidu.com 一级域名 www.baidu.com.cn 二级域名
(二级域名肯定属于一级域名)
二级域名能够读到一级域名的ck吗? 可以
一级域名能够读到二级域名的ck吗?可以