乐趣区

关于javascript:Vue中使用localStorage存储token并设置时效

置信大家平时的有的业务逻辑
就是登录之后要把 token 存下来
之前的我的项目大多数用的都是 cookie
在这次的我的项目我用了 vue-cookies 保留 token
保留没有问题 然而我须要再 main.js 中写一个全局的办法须要获取 cookie 中的 token 这时候就发现了 无论是我用 vue-cookies 的办法 还是 js 原生的获取 cookie 都获取不到 百度了很多办法都没有实现
于是还是决定应用 localStorage localStorage 是没有时效设置的 所以须要本人写一个办法来设置时效
代码参考 https://blog.csdn.net/yunchon…

首先新建一个 js 文件用来放封装的办法
storage.js

let myStorage=(function() {function setItem(params) {// 存入 localStorage 办法
        // 存入的参数
        const obj = {
            name: "",   // 存入的名字
            value: "",   // 存入的值
            expires: "",   // 过期工夫
            startTime: new Date().getTime()  // 存入的工夫
        }
        const options = {};// 将 obj 和传进来的 params 合并  放到 options 外面 实现 js 中浅拷贝
        Object.assign(options, obj, params);
        // 判断用户是否设置了过期工夫
        if (options.expires) {
            //  以 options.name 为 key,    options 为值放进去
            localStorage.setItem(options.name, JSON.stringify(options));
        } else {
            // 如果 options.expires 没有设置的话,就判断一下 value 的类型
            // 留神 咱们 的 localStorage 只能存储字符串 像是数组和对象要转换下
            let type = Object.prototype.toString.call(options.value);
            if (type == '[object Object]' || type == '[object Array]') {options.value = JSON.stringify(options.value);
            }
            localStorage.setItem(options.name, options.value);
        }
    }
    // 获取数值
    function getItem(name) {let item = localStorage.getItem(name);
        // 判断 item 是否存在 
        if (item) {
            // 先将取到的对象 看能转换成 object 对象格局,不能就阐明不是 json 字符串模式
            try {item = JSON.parse(item);
            } catch (error) {item = item;}
            // 如果有 expires 的值, 阐明设置了生效工夫
            if (item.expires) {
                    // 获取以后工夫
                let now = new Date().getTime();
                // 以后的工夫和存入时候的工夫 进行相减 和过期工夫进行比拟
                // 大于就阐明过期了 革除存储  小于或者等于 就没有过期 
                if (now - item.startTime > item.expires) {localStorage.removeItem(name);
                    return false;  // 返回一个状态值
                } else {
                    // 缓存未过期,返回值
                    return item.value;
                }
            } else {
                // 没有设置过期工夫,间接返回值
                return item;
            }
        }else{return false; // 如果 item 值为 undefined 则阐明没有存储 返回 false}
    }

    // 移除指定的缓存
    function removeItem(name) {localStorage.removeItem(name);
    }
    // 移除所有的存储数据
    function clear() {localStorage.clear();
    }
    return {    // 返回 执行接口
        setItem,
        getItem,
        removeItem,
        clear
    }
})();
export default myStorage; // 裸露办法

外围的代码就是这些
而后引入这个 js

import setStorage from 'yourpath/storage.js'

接下来就能够应用了

setStorage.setItem({value:yourtoken,name:'token',expires:604800000})// 存储 token  过期工夫是毫秒   我这里是一周

setStorage.getItem('token')// 获取 token
退出移动版