背景:
之前对Cookie和Session的了解就是,Cookie是由服务器产生,保存于浏览器,而Session是保存于服务器中,每一个用户对应唯一一个Session,当我们用户登录的时候,会通过Cookie中的SESSIONID,来对应服务器中的SESSION,进而获取到SESSION中的信息
通过一个项目,我进一步认识了Cokie和SESSION,如果我们的服务器发生了高并发,可以理解为,在30分钟内有大量的访问,那么我们的服务器内就会保存大量的Session,这样一来,就会对服务器造成很大的压力
解决服务器中保存Session的压力,是将Session中的数据保存到了数据库中,我们创建一个表,里面有SESSIONID和和userId,当有用户登录的时候,我们就通过Cookie里的SESSIONID,来对数据库查询SESSIONID得到userId,然后得到用户信息,可以实现Session的功能,但是,当发生高并发的时候,由于是数据库中查询得到的用户,我们无法知道当前用户对应的是哪个用户,于是多线程就派上用场了,给每一个用户建立一个线程,ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。
区别:
cookie:
-
1.每个域名的存储量有限(一般是4k)
-
2.所有域名的存储量有限
-
3.会跟随请求被发送到服务器上(cookie不能被localStorage替代)
-
4.有个数限制,不同浏览器下,一个域名下cookie的个数有限,并且限制数量可能不一样
sessionStorage:
-
1.当浏览器窗口关闭的时候, sessionStorage 就会被销毁
-
2.存储容量大(一般比localStorage的存储容量大)
localStorage:
-
1.在客户端永久保存
-
2.单个域名的存储容量大(一般为5M)
-
3.总体数量无限制
localStorage 的优势
- 1、localStorage 拓展了 cookie 的 4K 限制。
- 2、localStorage会可以将第一次请求的数据直接存储到本地,这个相当于一个 5M 大小的针对于前端页面的数据库,相比于 cookie可以节约带宽,但是这个却是只有在高版本的浏览器中才支持的。
localStorage 的局限
- 1、浏览器的大小不统一,并且在 IE8 以上的 IE 版本才支持 localStorage 这个属性。
- 2、目前所有的浏览器中都会把localStorage的值类型限定为string类型,这个在对我们日常比较常见的JSON对象类型需要一些转换。
- 3、localStorage在浏览器的隐私模式下面是不可读取的。
- 4、localStorage本质上是对字符串的读取,如果存储内容多的话会消耗内存空间,会导致页面变卡。
- 5、localStorage不能被爬虫抓取到。
localStorage 与 sessionStorage 的唯一一点区别就是 localStorage 属于永久性存储,而 sessionStorage 属于当会话结束的时候,sessionStorage 中的键值对会被清空。
常用的是Local、Session和Cookies这3个是浏览器缓存。
Web SQL是关系数据库缓存。
IndexedDB是索引数据库缓存。
Cache是离线缓存。