Vue.js :登录状态localStorage、sessionStorage、cookie保存方式使用比较
Vue.js :登录状态localStorage、sessionStorage、cookie保存方式使用比较一、localStorage二、sessionStorage三、cookie一、localStorage1.设置localStorageif(!window.localStorage){console.log("浏览器不支持localstorage");}else{/...
Vue.js :登录状态localStorage、sessionStorage、cookie保存方式使用比较
一、localStorage
1.设置localStorage
if(!window.localStorage){
console.log("浏览器不支持localstorage");
}else{
//主逻辑业务
localStorage.setItem(name, val);
}
2.获取localStorage
if(!window.localStorage){
console.log("浏览器不支持localstorage");
}else{
//主逻辑业务
localStorage.getItem(name);
}
3.清除localStorage
if(!window.localStorage){
console.log("浏览器不支持localstorage");
}else{
//主逻辑业务
localStorage.removeItem(name);
}
4.使用心得
localStorage储存空间很大,可以达到5M;存储时间长,不去手动清除localStorage值会一直在,可以自己根据存储时间手动设定保留时间。例如:
setToken(key, value) {
let curtime = new Date().getTime(); // 获取当前时间 ,转换成JSON字符串序列
let valueDate = JSON.stringify({
val: value,
timer: curtime
});
localStorage.setItem(key, valueDate);
}
getToken(key) {
const exp = 86400*1000 // 设置保留时间为24小时
if(localStorage.getItem(key)) {
var vals = localStorage.getItem(key); // 获取本地存储的值
var dataObj = JSON.parse(vals); // 将字符串转换成JSON对象
// 如果(当前时间 - 存储的元素在创建时候设置的时间) > 过期时间
var isTimed = (new Date().getTime() - dataObj.timer) > exp;
if(isTimed) {
localStorage.removeItem(key);
return null;
} else {
var newValue = dataObj.val;
}
return newValue;
} else {
return null;
}
}
关闭浏览器后重新打开值也一直在,但是我公司的产品要求是关闭浏览器后重新打开浏览器,登录状态要解除。我再vue使用中localStorage储存登录状态遇到的问题是前端js无法监测到浏览器关闭,网上window.onbeforeunload方法都试过都无法监测到浏览器关闭,或者是刷新页面也会触发,所以放弃这个localStorage方法的使用。
二、sessionStorage
使用大体上和localStorage一样
1.设置sessionStorage
if(!window.sessionStorage){
console.log("浏览器不支持sessionStorage");
}else{
//主逻辑业务
sessionStorage.setItem(name, val);
}
2.获取sessionStorage
if(!window.sessionStorage){
console.log("浏览器不支持sessionStorage");
}else{
//主逻辑业务
sessionStorage.getItem(name);
}
3.清除sessionStorage
if(!window.sessionStorage){
console.log("浏览器不支持sessionStorage");
}else{
//主逻辑业务
sessionStorage.removeItem(name);
}
4.使用心得
sessionStorage使用大体上和localStorage一样,sessionStorage有他唯一的特性就是,关闭浏览器后自动清除sessionStorage的值,似乎满足了关闭浏览器退出登录的需求,但是又出现了另个一个问题,同一个浏览器的不同窗口不能共享sessionStorage存的值,也就是每个窗口各有其sessionStorage值,这就导致了同一个浏览器客户端可以同时登录多个账号,不符合产品需求,所以也放弃这个使用。
三、cookie
我vue的项目中使用的是 ‘js-cookie’
import Cookies from 'js-cookie'
1.设置cookie
Cookies.set(name, value);
2.获取cookie
Cookies.get(name)
3.清除cookie
Cookies.remove(name)
4.使用心得
cookie的expires可以配置cookie保留时间,不设置的保留时间的话关闭浏览器就会自动清除,刚好满足了我关闭浏览器退出登录的需求,我就选用了这种方式,如果要设置半个小时过期的话可以这样设置时间。例如:
setToken(key, value) {
let curtime = new Date().getTime(); // 获取当前时间 ,转换成JSON字符串序列
let valueDate = JSON.stringify({
val: value,
timer: curtime
});
Cookies.set(key, valueDate);
}
getToken(key) {
const exp = 0.5*3600*1000 // 设置半小时
if(Cookies.get(key) && Cookies.get(key) != undefined) {
var vals = Cookies.get(key); // 获取本地存储的值
var dataObj = JSON.parse(vals); // 将字符串转换成JSON对象
// 如果(当前时间 - 存储的元素在创建时候设置的时间) > 过期时间
var isTimed = (new Date().getTime() - dataObj.timer) > exp;
if(isTimed) {
Cookies.remove(key);
return null;
} else {
var newValue = dataObj.val;
}
return newValue;
} else {
return null;
}
}
以上是一些做项目的心得体会,希望对大家有帮助。
更多推荐
所有评论(0)