Cookie的产生:
HTTP协议是无状态的。为了维护HTTP请求的会话状态,Cookie产生。
Cookie和HTTP请求的关系:
1、什么是Cookie?
Cookie 实质上是存储在计算机硬盘上某个目录下的文本文件。
2、Cookie的常见应用
- 网站记住用户名、密码的功能、自动登录的功能等等
- 网站的一键换肤功能,记录相关信息,在刷新界面时仍然保留当前皮肤
- 网站不同用户登录的权限不同,保存权限信息
3、Cookie的特点
1)、存储格式特点
- 文件中的数据以键值对的形式存在;
- 值对之间以分号和空格间隔;
2)、存储和读取等都有相应的操作API,应用灵活简单;
3)、Cookie存储数据的个数和大小特点(缺点:存储量小)
- 大小一般是4k;
- 浏览器允许每个域名所包含的Cookie有限制
- IE8——50/每个域名
- firefox——50/每个域名
- Opera——30/每个域名
4)、不同浏览器只能只用自己的Cookie,互不共享
5)、可以设置浏览器禁用Cookie
6)、Cookie存在跨域问题,通常情况下,不同域之间不能访问彼此的Cookie
7)、过期时间:
- 没有显示设置过期时间:关闭浏览器,Cookie消失
- 显示设置过期时间:Cookie会存入本地硬盘,不会随浏览器的关闭而消失
8)、每次HTTP请求,都会发送到服务器(缺点:浪费带宽)
4、操作document.cookie
document.cookie; // 获取cookie
document.cookie = "ww = '123ww'"; // 将那么数据添加到cookie中,是添加,并没有覆盖原来的数据
5、语法结构
属性 | 意义 | 备注 |
---|---|---|
key | 规定Cookie名称和对应的值 | |
domain | 规定Cookie生效的域 | 单点登录 1、默认当前所在域 2、只要显示设置域,有效范围为改域及改域的子域 3、域不同,相同name的Cookie也不会被覆盖
|
path | 规定Cookie生效的路径 | 1、规定哪些HTTP请求可以读取当前Cookie 2、路径是绝对路径 3、默认值为当前路径
|
expires | 规定Cookie的过期时间 | 1、属性值是一个字符串2、是一个确切的时间点‘。toUTCString()是必须的,因为不同的浏览器对时间的处理可能不同’3、Cookie过期后会即可被删除
|
max-age | 规定Cookie的过期时间 | 1、属性值是一个数字,单位是秒 2、max-age的优先级高于expires的优先级
|
SameSite | 用于限制第三方Cookie | 有效遏制CSRF攻击 1、Strict:禁用任何第三方请求 2、Lax:🈲异步请求,不禁同步GET请求 3、None:不限制 |
HttpOnly | 规定Cookie只能通过HTTP(s)请求获取 | 1、只用通过Http(s)请求的时候才会获取到该Cookie 2、防止通过js脚本获取,防止XSS攻击 |
secure | 规定Cookie只能在https协议下才能够发送到服务器,在一定程度上防止信息在传递的过程中被监听捕获,从而导致信息泄露 |
6、删除Cookie
- 利用过期时间删除Cookie
- key\domain\path\secure四个属性都匹配才能修改Cookie