经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » HTML5 » 查看文章
Web储存
来源:cnblogs  作者:菜鸡又来了  时间:2021/2/1 11:55:43  对本文有异议

Web储存

储存客户端数据的对象

对象 生命周期 储存大小 与服务端通信 易用性
cookies 一般由服务器生成,可设置失效时间。如果在浏览器端生成Cookie,默认是关闭浏览器后失效 4K左右 每次都会携带在HTTP头中,如果使用cookie保存过多数据会带来性能问题 需要程序员自己封装,源生的Cookie接口不友好
localStorage 除非被清除,否则永久保存 一般5MB左右 仅在客户端(即浏览器)中保存,不参与和服务器的通信 源生接口可以接受,亦可再次封装来对Object和Array有更好的支持
sessionStorage 仅在当前会话下有效,关闭页面或浏览器后被清除 同上 同上 同上

cookies

使用cookie储存本地数据

cookies是传统的本地数据储存方法

使用cookie储存一条 名为 cookieKey,值为 cookieValue,过期事件为 一个小时后 的代码示例:

  1. const laterHour = new Date()
  2. laterHour.setHours(laterHour.getHours() + 1) // 一个小时后的时间
  3. document.cookie = `cookieKey=cookieValue;expires=${laterHour}` // cookie的用法
  4. console.log(document.cookie) // cookieKey=cookieValue 控制台输出的cookie

执行完毕后,按 F12 打开 开发者工具,点击 Application 中的 Cookies 可以看到刚才储存的cookie数据

image-20210116143930098

移除cookie 的数据很简单,只需再次覆盖想要移除的cookie,再把它的过期时间设置为 负数 ,就可以移除了,具体代码如下:

  1. document.cookie = `cookieKey=cookieValue;expires=-1` // 移除键为cookieKey的数据

获取cookie 只能获取整个cookie的数据,想要获取某个键的值只能通过分割字符串获取数据,具体代码如下:

  1. const laterHour = new Date()
  2. laterHour.setHours(laterHour.getHours() + 1)
  3. document.cookie = `cookiesKey1=cookiesValue1;expires=${laterHour}` // 储存cookieKey1/cookieValue1
  4. document.cookie = `cookiesKey2=cookiesValue2;expires=${laterHour}` // 储存cookieKey1/cookieValue2
  5. document.cookie = `cookiesKey3=cookiesValue3;expires=${laterHour}` // 储存cookieKey1/cookieValue3
  6. const cookie = document.cookie
  7. console.log(cookie) // cookiesKey1=cookiesValue1; cookiesKey2=cookiesValue2; cookiesKey3=cookiesValue3
  8. const cookieArr = cookie.split('; ') // 分割字符串,分号
  9. const cookieObj = {}
  10. cookieArr.forEach(item => {
  11. const keyValue = item.split('=') // 再次分割
  12. cookieObj[keyValue[0]] = keyValue[1]
  13. })
  14. console.log(cookieObj.cookiesKey1) // cookiesValue1
  15. console.log(cookieObj.cookiesKey2) // cookiesValue2
  16. console.log(cookieObj.cookiesKey3) // cookiesValue3

cookie的简单封装

实际应用上,向上面代码那样使用cookie是比较繁琐的,尤其是在获取数据时,我们得到的是一个一连串的 字符串,通常情况下,我们想获取的并不是这样一个数据,而是想要某个对应 ,所以要对其封装:

  1. // 设置cookie过期时间
  2. function afterDay(day){
  3. var time=new Date();
  4. time.setDate(time.getDate()+day);
  5. return time;
  6. }
  7. // 设置cookie,参数分别为 键, 值, 过期时间
  8. function setCookies(key,value,expires){
  9. expires=afterDay(expires)
  10. document.cookie=`${key}=${value};expires=${expires}`;
  11. }
  12. // 获取cookies的对象
  13. function getCookies(){
  14. var cookies=document.cookie.split('; ');
  15. var cookiesArr=[];
  16. var cookiesObj={};
  17. cookieArr.forEach(item => {
  18. const keyValue = item.split('=')
  19. cookieObj[keyValue[0]] = keyValue[1]
  20. })
  21. return cookiesObj;
  22. }

创建一个名 cookies.js 文件(名字随意),将上面代码复制保存,下面代码将其引入使用即可简单使用cookie:

  1. <script src="./cookies.js"></script>
  2. <script type="text/javascript">
  3. setCookies('cookieKey1', 'cookieValue1', '1')
  4. setCookies('cookieKey2', 'cookieValue2', '1')
  5. setCookies('cookieKey3', 'cookieValue3', '1')
  6. const cookie = getCookies()
  7. console.log(cookie.cookieKey1) // cookieValue1
  8. console.log(cookie.cookieKey2) // cookieValue2
  9. console.log(cookie.cookieKey3) // cookieValue3
  10. </script>

localStorage和sessionStorage

不管是 localStorage,还是 sessionStorage,可使用的API都相同,常用的有如下几个(以localStorage为例):

localStorage/sessionStorage的方法 作用
localStorage(sessionStorage).setItem(key,value) 储存数据
localStorage(sessionStorage).getItem(key) 读取数据
localStorage(sessionStorage).removeItem(key) 删除单个数据
localStorage(sessionStorage).clear() 删除所有数据
localStorage(sessionStorage).key(index) 得到某个索引的key

具体代码如下:

  1. localStorage.setItem('data1', 'msg1') // 储存数据方式1
  2. localStorage.data2 = 'msg2' // 储存数据方式2
  3. console.log(localStorage.data1) // 获取数据方式1
  4. console.log(localStorage.data2) // 获取数据方式2
  5. console.log(localStorage.key(0)) // 获取索引的key值
  6. localStorage.removeItem('data1') // 移除单个数据
  7. localStorage.clear() // 移除所有数据

同样地,也可以再开发者工具中像查看Cookies数据查看 localStoragesessionStorage

注意:键/值对通常以字符串存储,譬如传入value值为Number类型的数字1,实际储存的是String的字符串1,你可以按自己的需要转换该格式。

以上实例只是演示了简单的 localStoragesessionStorage存储与查找,更多情况下我们存储的数据会更复杂,所以在实际应用中,通产使用 JSON 来储存数据

原文链接:http://www.cnblogs.com/WuMouRen/p/14288827.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号