一、cookie、sessionStorage、localStorage的区别
1. 存储大小不同
localStorage的大小一般为5M
sessionStorage的大小一般为5M
cookie的大小一般为4K
2. 有效期不同
localStorage存储的内容,需要手动清除才会消失(调用api或者清除缓存)。
sessionStorage在当前会话下有效,关闭页面或者浏览器时会被清空。
cookie在设置的有效之前有效,当超过有效期便会失效。
3. 与服务端的通信
localStorage不参与服务器端的通信。
sessionStorage不参与服务器端的通信。
cookie参与服务器端通信,每次都会携带http的头信息中。(如果使用cookie保存过多数据会带来性能问题)
4. 生成方式
localStorage前端生成。
sessionStorage前端生成。
cooki服务器生成。可设置失效时间。服务器通过响应头“Set-Cookie”传给前端。
5. 数据共享
localStorage相同浏览器不同页面可共享(同源页面)。
sessionStorage相同浏览器同一个页面可以共享,不同页面不可共享(同源页面)。
cookie相同浏览器不同页面可共享(同源页面)。
二、cookie:
主要用于存储访问过的网站数据,存储浏览器的信息到本地计算机中,用于客户端和服务器端的通讯
Cookie 是为了解决“如何记住用户信息”而发明的:
当用户访问网页时,他的名字可以存储在 cookie 中。
下次用户访问该页面时,cookie 会“记住”他的名字。
特点:
(1)以文本形式保存(.txt)
(2)cookie存储信息不安全(不能存放重要的信息)
(3)cookie中有域(domain)和路径的概念,浏览器是一个比较安全的环境,所以不同的域之间不能直接访问(js的同源策略限制)
name: cookie的名字(键)
value: cookie存放的值
expires: 指cookie过期的时间(该时间为世界时间 UTC时间)也称为格林威治时间
max-age: 指cookie最大的存活有效期(单位:秒)
domain: 指的是cookie当前的域
path: 指cookie当前的路径
size: 指cookie存放的大小
secure: 指cooke的安全属性
注意:expires和max-age的默认值为session代表关闭浏览器,该cookie则清空、失效
cookie有效期失效后,浏览器一般会自行删除这个cookie。
三、webstorage:
- 存储内容大小一般支持5M左右(不同浏览器可能还不一样)
- 浏览器端通过window.sessionStorage和window.localStorage属性来实现本地存储机制
- 相关API:
(1)xxxStorage.setItem(‘key’, ‘value’);
该方法接受一个键和值作为参数,会把键值对添加到存储中,如果键名存在,则更新其对应的值。
(2)xxxStorage.getItem(‘key’);
该方法接受一个键名作为参数,返回键名对应的值。
(3)xxxStorage.removeItem(‘key’);
该方法接受一个键名作为参数,并把该键名从存储中删除。
(4)xxxStorage.clear();
该方法会清空存储中的所有数据。 - 备注:
(1)sessionStorage存储的内容会随着浏览器窗口关闭而消失。
(2)localStorage存储的内容,需要手动清除才会消失(调用api或者清除缓存)。
(3)xxxStorage.getItem(key)如果key对应的value获取步到,那么返回值是null。
(4)JSON.parse(null)的结果依然是null。
四、cookie、session、token
http无状态 ⇒ cookie ⇒ session ⇒ JWT(Json Web Token)
cookie:浏览器发起http请求,服务器会进行cookie设置,也就是set-cookie,服务器会把name和value的值填充完整,发送给浏览器后,浏览器会保存起来,这样浏览器以后发送的每一个请求都会自动附上这个cookie。
session:把用户名和密码放在cookie很不安全,产生了session。浏览器保存的不是用户名和密码了,而是sessionID。
诞生并保存在服务器,由服务器主导一切,cookie是一种数据载体,把session放在cookie中送到客户端,cookie跟随http的每个请求发送出去。
token:如果有大量用户访问服务器,可能面临有大量sessionID存储在数据库中,产生了jwt。
诞生在服务器,但保存在浏览器,由客户端主导一切,可以放在cookie或storage中,持有token可以允许访问服务器