sessionStorage、localStorage技术相关以及商家sid、sbid记录相关、vue相关问题
一个项目的需求如下: 作为第一个第三方平台,我们可以提供给不同的商家技术支持,即在一个url后面根据不同的商家来提供不同的查询字符串(包含sid和sbid),所以为了得到这个商家的信息,我们需要使用解析这个查询字符串然后从后天获取数据。
出现的问题1: 由于这是vue做的单页面应用,在下方有不同的按钮路由到不同的页面, 所以如果点击到其他路由,然后再点击回来的时候,根据路由设置,我们的首页的url此时应该是没有查询字符串了,当然,这个不重要啊,因为我们可以把数据(sid和sbid)放在一个全局变量中啊, 每次到首页的时候我们再请求就好了,但是这存在的一个问题是一旦用户刷新,那么这个全局变量势必会丢失,所以页面也就404了,所以为了解决这个问题,我们必须要将sid和sbid存放到本地存储中。ok! 这里确定了使用本地存储的解决方案。但是随之就出现了第二个问题。
出现的问题2: 本地存储包括sessionStorage和localStorage,我们应该选用哪一种方案更为合适呢? 由于每次的sid和sbid可能都是不一样的(打开不同的商家),所以存在sessionStorage中还是非常合适不过的,只要回话结束就可以不再本地存储sid和sbid了。但是由于这个项目中涉及到了登录、支付等,在使用微信登录时,就需要先跳转到微信的页面,然后再跳转回来,一旦跳转回来那么这个session就丢失了,实际上session即使是刷新页面也是不会丢失的,但是一旦跳转到别的页面下再跳转回来就是会丢失的。 所以在这样的情况下。还是需要使用localStorage的。
出现的问题3: 使用localStorage是可以的,但问题时在一进入首页的时候,我们就将sid和sbid存入,这时没有问题,但是当从其他路由再回来的时候这时的查询字符串就丢失了,那么我们还去存sid和sbid,就会导致sid和sbid都成了undefined, 所以在存取之前我们需要加一个判断 --- 就是sid和sbid在localStorage中是否为空,如果已经存在了,那么我们就不要再次存取,这时也就没有覆盖成空的值的问题了。
出现的问题4:在上面的一步中,貌似我们添加了一层判断之后就会解决问题,但是新的问题又出现了,即当用户下次打开了一个新的商铺,那么这个url中查询字符串的sid和sbid和存在localStorage中的就不同了,所以这样的问题就是一旦发现本地已经有了,所以不再覆盖,这样用户无论打开哪一个链接最终打开的都是同一个页面了。于是,我们需要再添加一个判断 --- 即载入首页之后,先使用正则来判断当前url中是否含有 sid和sbid相关的关键字,如果有,说明这是一个新的链接(不绝对是,后面分析),那么就重新使用这个链接中的sid和sbid,那么就可以确保使用的都是最新的店铺。这里的判断直接使用正则表达式中的 test 即可。
出现的问题5: 在问题4中,我们提到过即使url中含有sid和sbid相关的关键字,但是也是有问题的,因为如果我们没有跳转到其他页面时,那么这个查询字符串就是一直存在的,所以如果再跳转到首页然后加载是没有必要的。这时我们的解决办法是使用vue中的keep-alive,即每次点击回来的时候不重新加载,那么写在首页中的created钩子函数中创建localStorage的步骤也就用不上了,所以这才是最好的解决办法。
最终解决办法,使用localStorage、两层判断、keep-alive解决这个问题。
补充: 之前的说法 --- 两层判断实际上是有问题的,因为只要一层判断即可,即 --- 如果在重新进入或刷新的时候,当前页面的url中有相应的关键字,我们就使用,没有else语句。 因为通过这种方式一旦进入页面,那么一定最开始是有的,然后在当前网站不同路由跳转时,使用keep-alive的方式就不会出现进入create重新判断的情况。 而如果是在登录和支付之后,可能这个查询字符串没有了,那么就会进行判断,显然,匹配不到自然不会替换,而是使用本地localStorage中的sid和sbid,也就是之前的这个店,这样,就不会出现问题了。
sessionStorage、localStorage技术相关以及商家sid、sbid记录相关、vue相关问题的更多相关文章
- 【记录】vue相关知识点
let let是es6新引入的命令,与var命令类似,但是let是声明的局部变量,只在所在代码块中有效. ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景. var s = ...
- 彻底弄清楚session,cookie,sessionStorage,localStorage的区别及应用场景(面试向)
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_94 客户端状态保持是一个老生常谈的问题了,归根结底追踪浏览器的用户身份及其相关数据无非就是以下四种方式:session,cooki ...
- session,cookie,sessionStorage,localStorage的区别及应用场景
session,cookie,sessionStorage,localStorage的区别及应用场景 浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟 ...
- 缓存session,cookie,sessionStorage,localStorage的区别
https://www.cnblogs.com/cencenyue/p/7604651.html(copy) 浅谈session,cookie,sessionStorage,localStorage的 ...
- sessionStorage & localStorage & cookie
sessionStorage & localStorage & cookie 概念 html5中的Web Storage包括了两种存储方式:sessionStorage和localSt ...
- sessionStorage & localStorage in-depth
sessionStorage & localStorage in-depth Web Storage API https://developer.mozilla.org/en-US/docs/ ...
- sessionStorage / localStorage
var referurl = document.referrer; //上级网址 if(referurl.indexOf('address_order')>0){ //判断是否是从上一级地址跳转 ...
- H5的storage(sessionstorage&localStorage)简单存储删除
众所周知,H5的storage有sessionstorage&localStorage,其中他们的共同特点是API相同 下面直接上代码,storage中的存储与删除: <!DOCTYPE ...
- vue 相关技术文章集锦
不断更新,如果看到好的文章~~~ 总结篇 vue组件间通信六种方式(完整版) - 原作者:简书-浪里行舟 原理/源码篇 Vue.js 技术揭秘 Vue技术内幕 实战/经验篇 Vue相关开源项目库汇总 ...
随机推荐
- select, iocp, epoll,kqueue及各种I/O复用机制
http://blog.csdn.net/heyan1853/article/details/6457362 首先,介绍几种常见的I/O模型及其区别,如下: blocking I/O nonblock ...
- XJOI 3578 排列交换/AtCoder beginner contest 097D equal (并查集)
题目描述: 你有一个1到N的排列P1,P2,P3...PN,还有M对数(x1,y1),(x2,y2),....,(xM,yM),现在你可以选取任意对数,每对数可以选取任意次,然后对选择的某对数(xi, ...
- [教学] Log.d 日志调试查看(所有平台)
Firemonkey 提供了一个跨平台的日志显示函数 Log.d,当 App 越来越大 Debug 编译越来越慢时,可以利用它在 Release 模式来除错,下列说明如何在各平台查看. 小技巧:可以在 ...
- Android-获取网络图片设置壁纸
下载图片,设置壁纸 的代码: package liudeli.async; import android.app.Activity; import android.app.ProgressDialog ...
- Java50道经典习题-程序4 分解质因数
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5.分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:(1)如果这个质数恰等于n,则说明分解质因数的过程已经 ...
- Linux常用开发指令
gcc mysqltest.c -o mysqltest `mysql_config –cflags –libs`
- 零成本实现WEB性能测试(二)JMeter基础知识
特点: 支持多种服务类型进行测试,包括: Web-Http,HTTPS SOAP Database via JDBC LDAP JMS Mail-POP3 & IMAP 支持录制回放方式获取脚 ...
- 【转】C#中使用aria2c进行下载并显示进度条
[转自] C#中使用aria2c进行下载并显示进度条 - 云平台知识库 - 博客园https://www.cnblogs.com/littlehb/p/5782714.html 正则表达式的生成网站: ...
- C#多线程编程实战1.1创建线程
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...
- micropython esp8266 烧录
MicroPython 介绍 MicroPython 是一个 Python 3 语言的精简.高效实现,其包括 Python 标准库的一小部分,并经过优化,可以运行在微控制器和受限环境中运行. Micr ...