zoukankan      html  css  js  c++  java
  • 客户端localStorage命名冲突问题

    问题背景:

    我们的前端项目客户端存储采用localStorage,恰好在同一个域下部署了2个前端项(a和b)目,判断用户是否登录的信息都用token字段存储在localStorage中。当我们打开项目a登录后存储了token,然后非正常退出(关掉浏览器窗口或者标签页),然后在打开项目b,问题就出现了,项目b从localStorage中获取到token,判断到用户已经登录,导致项目b显示不正常(没有获取到项目b所需的各种信息,项目a和项目b没有半毛钱关系)。这是所谓的同域下的localStorage命名冲突问题。

    解决:

    为每一个localStorage的key值提供唯一的前缀区分(我们采用的是用工程名称来区分,就是每一个前端工程起一个名称,虽然有重复的可能,不过概率很小,已经能够解决我们遇到的问题了)

    实现:

    在项目根目录下创建config.js文件,填写工项目名:

    export default {
        APP_NAME: 'new-electric-bicycle-web', // 工程名  
    }

    项目根目录下新增util/storage.js文件,写一个localStorage的工具函数:

    /**
     * Created by hs on 2020/1/14
     * 封装localStorage方法,添加ls前缀,防止ls的key值命名污染
     */
    import Config from '../../config'
    
    const prefix = Config.APP_NAME
    
    export default {
      /**
       * 获取一个值
       * @param key
       * @return {*}
       */
      get (key) {
        key = `${prefix}-${key}`
        let value = localStorage.getItem(key)
    
        if (!value) {
          return null
        }
    
        return JSON.parse(value)
      },
      /**
       * 存储一个值
       * @param key
       * @param value
       */
      set (key, value) {
        key = `${prefix}-${key}`
        localStorage.setItem(key, JSON.stringify(value))
      },
      /**
       * 删除一个值
       * @param key
       */
      remove (key) {
        key = `${prefix}-${key}`
        localStorage.removeItem(key)
      },
      /**
       * 清空所有值(当前项目命名空间下的key值)
       */
      clear () {
        let len = localStorage.length
        let keys = []
    
        for (let i = 0; i < len; i++) {
          let key = localStorage.key(i)
          if (key && key.startsWith(prefix)) {
            keys.push(key)
          }
        }
    
        keys.map(key => localStorage.removeItem(key))
      },
    }
     
  • 相关阅读:
    Docker 镜像
    Docker 安装命令
    Docker 基本概念
    Redis 高可用之"持久化"
    Git 安装和使用
    oracle角色
    oracle权限
    审计
    手动创建数据库
    oracle口令文件认证
  • 原文地址:https://www.cnblogs.com/hanshuai/p/12194307.html
Copyright © 2011-2022 走看看