1、HTTP Cookie
HTTP cookie又叫web cookie或者浏览器cookie,是服务器发送到浏览器并保存在本地的一小块数据,会附着在http上,他会在浏览器下次向同一服务器再发起请求时被携带并发送到服务器上。
cookie可以携带用户信息,当服务器检查cookie的时候,便可以获取客户端的状态。
通常,cookie用于告知服务器端两个请求是否来自同一浏览器,如保持用户的登录状态。
cookie使用基于无状态的HTTP协议记录稳定的状态信息成为了可能。
cookie是指某些网站为了辨别用户身份而储存在本地用户终端上的数据,通常经过加密。cookie是服务端生成,客户端进行维护和存储。cookie并非本地存储,而是维持状态。
2、使用场景
- 会话状态管理【如用户的登录状态、购物车、游戏分数等】
- 个性化设置【用户自定义设置、主题等】
- 浏览器行为跟踪【跟踪分析用户行为等】
3、cookie的作用
cookie曾一度用于客户端数据的存储,
由于服务器指定cookie后,浏览器的每次请求都会携带cookie数据,会带来额外的性能开销,尤其是在移动环境下。
新的浏览器API已经允许开发者直接将数据存储到本地【localstorage、sessionStorage或者indexedDB】
4、cookie的原理
当我们第一次访问网页的时候,浏览器发起HTTP请求,服务器响应请求后,会在响应头里添加一个Set-Cookie选项,将cookie放入到响应请求中。
当我们第二次发起请求的时候,会通过cookie请求头部将cookie发送给服务器,服务器会辨别用户身份。
cookie的过期时间、域、路径、有效期、适用站点都可以根据需要来指定。
cookie就是一种浏览器管理状态的一个文件,有name,有value
5、创建cookie
4-1、http response header中的set-cookie
当cookie的过期时间被设定时,设定的日期和时间只与客户端有关,与服务器无关。
4-2、通过document.cookie来读写cookie,以键值对形式展示
[document.cookie=“name=123,domain=.baidu.com”]:domain指定了哪些域名可以接收cookie,如果没有设置domain,就会自动绑定到执行语句的当前域。
5、请求中cookie的携带
- 浏览器第一次请求服务器:在响应请求中携带cookie,返回给浏览器
- 浏览器第二次请求,携带cookie,服务器根据cookie辨别用户,也可以修改cookie的内容
6、cookie的注意事项
- cookie不可跨域访问:如果打开百度网页设置cookie,只有域名为baidu.com的cookie可以设置成功;
- 每个cookie都会绑定单一的域名,一个域名下绑定的cookie和name不能相同,相同的name的值会被覆盖掉;
- cookie的值必须被URL编码
- cookie绑定的域名,如果没有设置,就会绑定到执行语句的当前域;
- 同一个域名下的二级域名也是不可以交换使用cookie的;
- 一般浏览器的cookie都是默认存储的,通过设置expires更改cookie的存储时长;
- cookie的4KB并不是一个域名下所有的cookie共享的,而是一个name的大小;
- 过多的cookie 会带来巨大的性能浪费;
- cookie是用来维护用户信息的,而域名下的所有请求都会携带cookie,但对于静态文件的请求,携带cookie信息无用,可以通过cdn的域名和主战的域名分开来解决。
7、cookie与安全
- httpOnly:不能通过JS访问cookie,减少XSS攻击;
- secure:只能在协议为https的请求中携带cookie;
- same-site:规定浏览器不能在跨域中携带cookie,减少CSRF攻击
8、max-age的设置
max-age以s为单位:
> 0:表示达到max-age以后,cookie失效,被删除;
< 0:表示的是临时存储,不会生出cookie文件,只会存储在浏览器内存中,只会在打开的浏览器窗口或子窗口有效,一旦浏览器关闭,cookie就会消失;
= 0:失效的cookie会被浏览器自动从内存中删除;