当前位置: 首页 > Web前端 > HTML5

浏览器存储包

时间:2023-04-04 23:57:23 HTML5

/****title:storage.js*Author:Gaby*Email:xxx@126.com*Time:2022/6/117:30*last:2022/6/217:30*Desc:forstorage简单package*/importCryptoJSfrom'crypto-js';//十六进制数作为密钥constSECRET_KEY=CryptoJS.enc.Utf8.parse("3333e6e143439161");//十六进制整数作为密钥keyoffsetconstSECRET_IV=CryptoJS.enc.Utf8.parse("e3bbe7e3ba84431a");//typewindow.localStorage,window.sessionStorage,constconfig={type:'localStorage',//本地存储类型sessionStorageprefix:'SDF_0.0.1',//名称前缀建议:项目名称+项目版本expire:1,//过期时间单位:秒isEncrypt:true//默认加密是为了调试方便,开发时可以不加密}//判断是否存储StorageExport是否支持constisSupportStorage=()=>{return(typeof(Storage)!=="undefined")?true:false}//设置setStorageexportconstsetStorage=(key,value,expire=0)=>{if(value===''||value===null||value===undefined){value=null;}if(isNaN(expire)||expire<0)thrownewError("Expiremustbeanumber");expire=(expire?expire:config.expire)*1000;letdata={value:value,//存储值time:Date.now(),//存储值时间戳expire:expire//过期时间}constencryptString=config.isEncrypt?加密(JSON.stringify(数据)):JSON.stringify(数据);window[config.type].setItem(autoAddPrefix(key),encryptString);}//获取getStorageexportconstgetStorage=(key)=>{key=autoAddPrefix(key);//键不存在if(!window[config.type].getItem(key)||JSON.stringify(window[config.type].getItem(key))==='null'){returnnull;}//在连续使用中优化更新conststorage=config.isEncrypt?JSON.parse(decrypt(window[config.type].getItem(key))):JSON.parse(window[config.type].getItem(key));让nowTime=Date.now();//到期删除if(storage.expire&&config.expire*6000<(nowTime-storage.time)){removeStorage(key);返回空值;}else{//如果在未过期期间调用,则自动续期保持活动setStorage(autoRemovePrefix(key),storage.value);返回存储值;}}//是否有hasStorageexportconsthasStorage=(key)=>{key=autoAddPrefix(key);让arr=getStorageAll().filter((item)=>{returnitem.key===key;})返回arr.length?true:false;}//获取所有keyexportconstgetStorageKeys=()=>{letitems=getStorageAll()letkeys=[]for(letindex=0;index{returnwindow[config.type].key(index)}//获取localStorage长度exportconstgetStorageLength=()=>{returnwindow[config.type].length}//获取所有getAllStorageexportconstgetStorageAll=()=>{letlen=window[config.type].length//获取长度letarr=newArray()//定义数据集for(leti=0;i{window[config.type].removeItem(autoAddPrefix(key));}//清除clearStorageexportconstclearStorage=()=>{window[config.type].clear();}//在名称前自动添加前缀constautoAddPrefix=(key)=>{constprefix=config.prefix?配置前缀+'_':'';returnprefix+key;}//移除添加的前缀constautoRemovePrefix=(key)=>{constlen=config.prefix?config.prefix.length+1:'';returnkey.substr(len)//constprefix=config.prefix?配置前缀+'_':'';//returnprefix+key;}/***加密方式*@paramdata*@returns{string}*/constencrypt=(data)=>{if(typeofdata==="object"){try{data=JSON。字符串化(数据);}赶上(错误){控制台。日志(&quot;加密错误:",错误);}}constdataHex=CryptoJS.enc.Utf8.parse(data);constencrypted=CryptoJS.AES.encrypt(dataHex,SECRET_KEY,{iv:SECRET_IV,mode:CryptoJS.mode.CBC,填充:CryptoJS.pad.Pkcs7});returnencrypted.ciphertext.toString();}/***解密方法*@paramdata*@returns{string}*/constdecrypt=(data)=>{constencryptedHexStr=CryptoJS.enc.Hex.parse(数据);conststr=CryptoJS.enc.Base64.stringify(encryptedHexStr);constdecrypt=CryptoJS.AES.decrypt(str,SECRET_KEY,{iv:SECRET_IV,模式:CryptoJS.mode.CBC,填充:CryptoJS.pad.Pkcs7});constdecryptedStr=decrypt.toString(CryptoJS.enc.Utf8);返回decryptedStr.toString();}