浏览器:WebStorage
WebStorage网页存储,用于在前端存储数据,常见的有Cookie
、LocalStorage
、SessionStorage
、IndexDB
Cookie
HTTP协议是无状态的,HTTP协议自身不对请求和响应之间的通信状态进行保存
当一个用户登录之后,HTTP是无状态的并不知道用户已经登录,需要一个东西来保存这个状态,这个就是Cookie。
Cookie就是维护客户端与服务器之间的一个状态,通常服务器将某个表示状态的数据进行加密,通过响应头set-cookie
返回给客户端,然后客户端保存。
Cookie并不会一直保存在客户端,可以设置一个过期时间,如果不设置过期时间,那么就是会话级别的,网页已关闭就删除
Cookie可以用来共享数据,但是受同源策略
影响,只能在同源的网页才能获取到一样的cookie
缺点:
只能是字符串,并且只能保存4kb的内容
没有自己的api,需要用户自己封装
在客户端发送的每一个请求时,cookie必须同时发送给服务器,增加请求的体积
不安全,如果不设置
http-only
攻击者可以使用JavaScript就可以获取到Cookie实施XSS攻击
相关属性
http-only:不能使用Javascript访问cookie,减少
XSS攻击
secure:只能在协议为HTTPS的请求中携带
same-site:规定浏览其不能再跨域请求中携带cookie,减少
crsf攻击
1 | Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly |
1 | var cookie = document.cookie;//获取cookie |
cookie和session的区别?
答:
单个cookie保存的数据不能超过4kb;session大小没有限制。
cookie保存在浏览器,session保存在服务器
session保存的东西越多,就越占用服务器内存,对于用户在线人数较多的网站,服务器的内存压力会比较大。
在客户端发送的每一个请求时,cookie必须同时发送给服务器,增加请求的体积
LocalStorage/SessionStorage
两者的特点:
- 大小为5M左右
- 仅在客户端使用,不和服务端进行通信
- 接口封装较好,有自己的api
- 受同源策略影响
不同点:
- SessionStorage是会话级别网页关闭就会清除,而LocalStorage需要手动清除,不然一直存在
1 | localStorage.setItem('name','world') |
IndexDB
IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。这些都是 LocalStorage 所不具备的。就数据库类型而言,IndexedDB 不属于关系型数据库(不支持 SQL 查询语句),更接近 NoSQL 数据库。
- window.indexedDB.open打开一个数据库,onsuccess、onerror、onupgradeneeded监听一个数据库的成功、失败、新建(升级),接受两个参数(数据库名,版本(默认1,新建1))
- db.createObjectStore创建一个表
- objectStore.createIndex创建索引
- db.transaction创建一个事务
- objectStore.add添加数据
- objectStore.put修改数据
- objectStore.delete删除数据
- objectStore.get获取数据
- objectStore.openCursor打开列表指针
1 | //打开一个数据库 |