JS中浏览器的数据存储机制
一、JS中的三种数据存储方式
cookie、sessionStorage、localStorage
二、cookie
1、cookie的定义:
cookie是存储在浏览器上的一小段数据,用来记录某些当页面关闭或者刷新后仍然需要记录的信息。在控制台用document.cookie
可以查看当前正在浏览网站的cookie。
2、cookie存在安全问题:
cookie虽然很方便,但是使用cookie有一个很大的弊端,cookie中的所有数据在客户端就可以被修改,数据非常容易被伪造,那么一些重要的数据就不能放在cookie中了,而且如果cookie中数据字段太多会影响传输效率
3、cookie的作用
-
保存用户登录状态。例如将用户id存储于一个cookie内,这样当用户下次访问该页面时就不需要重新登录了,现在很多论坛和社区都提供这样的功能。 cookie还可以设置过期时间,当超过时间期限后,cookie就会自动消失。因此,系统往往可以提示用户保持登录状态的时间:常见选项有一个月、三个 月、一年等。
-
跟踪用户行为。例如一个天气预报网站,能够根据用户选择的地区显示当地的天气情况。如果每次都需要选择所在地是烦琐的,当利用了 cookie后就会显得很人性化了,系统能够记住上一次访问的地区,当下次再打开该页面时,它就会自动显示上次用户所在地区的天气情况。因为一切都是在后 台完成,所以这样的页面就像为某个用户所定制的一样,使用起来非常方便
-
定制页面。如果网站提供了换肤或更换布局的功能,那么可以使用cookie来记录用户的选项,例如:背景色、分辨率等。当用户下次访问时,仍然可以保存上一次访问的界面风格。
三、sessionStorage
当用户用账号和密码登录某个网站后,刷新页面仍然保持登录的状态,服务器如何分辨这次发起请求的用户是刚才登录过的用户呢?这里就是用session保存状态。
用户在输入用户名密码提交给服务器,服务端验证通过后会创建一个session用于记录用户的相关信息,这个session可保存在服务器内存中也可保存在数据库中。
- 创建session后,会把关联的session_id通过setCookie添加到http相应头部
- 浏览器在加载页面时发现响应头部有set-cookie字段,就把这个cookie种到浏览器指定域名下
- 当下次刷新页面时,发送的请求会带上这条cookie,服务端在接收到后根据这个session_id来识别用户。
四、localStorage
-
localStorage是H5本地存储web storage特性的API之一,用于将大量数据(最大5M)保存在浏览器中,保存后数据永远存在不会失效过期,除非用js手动清除。
-
不参与网络传输
-
一般用于性能优化,可以保存图片、js、css、html模板、大量数据
五、cookie、sessionStorage、localStorage之间的区别
相同点:都是存储在浏览器端。并且是同源的
不同点:
1、存储大小
一般浏览器存储cookie最大容量为4kb,很多浏览器都限制一个站点最多保存20个cookie。
sessionStorage和localStorage虽然也有存储大小的限制,但是要比cookie大得多。
2、存储有效期:
cookie保存的数据在过期时间之前一直有效,即使关闭浏览器
sessionStorage
保存的数据用于浏览器的一次会话(session),当会话结束(通常是窗口关闭),数据被清空;
localStorage
保存的数据长期存在,因为localStorage的数据是写入磁盘中,每次读取数据时,实际上是从硬盘驱动器上读取这些字节。
3、安全性
cookie中的所有数据在客户端就可以被修改,数据非常容易被伪造,所以对于用户信息来讲,应该将与登录相关的重要信息存储在session中。
4、性能
如果cookie中数据字段太多的话,会影响传输效率,此时需要将重要的信息存放在session中。
但是,session会在一定的时间内保存在服务器上,当访问增多时,会影响服务器的性能。为了减轻服务器的负担,应当使用cookie
参考链接:https://www.jianshu.com/p/775b64b3d35f