localStorage、sessionStorage、storageEvent

264 阅读2分钟

localStorage

web端平时虽然用的不多,但有时候也避免不了需要持久化储存 localStorage (实际上cookie也算是默认的持久化储存),例如:后台走token校验而不是cookie逻辑,还有一些是加密后的账号密码(但不推荐)等信息

需要注意的是同源条件下,storage 共享,可以理解为同一个域名

//导入 localStorage
import localStorage from "localStorage";//引入

//储存字符串
localStorage.setItem("user_name", "剪刀石头布");
//储存对象
localStorage.setItem("user_info", JSON.stringify(userInfo));

//通过键值去除单个对象
localStorage.getItem('user_info')

//通过键值删除单个数据
localStorage.removeItem("user_info");

//删除我们储存的所有数据
localStorage.clear();

localStorage储存一般被限制在 5M 以内,因此我们尽量只储存少量数据使用即可

localStorage内容可以被主动清理,因此不是存储进去使用就一劳永逸,使用时需要检查,将取到的放到内存中使用最佳,避免被清理掉而引发的错误出现

另外使用时应当注意内容加密,至少避免新手玩家直接能看到保存的信息😂

window.sessionStorage

实际使用也可以不导入 localStorage ,直接使用 window.sessionStorage,但其使用场景标识着其不能算持久化储存

使用场景临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据

//例如
window.sessionStorage.setItem("user_name", "剪刀石头布");
window.sessionStorage.getItem("user_name");
window.sessionStorage.removeItem("user_name");
window.sessionStorage.clear();

storageEvent 事件

当前页面使用的 storage 被其他页面修改时,会触发 StorageEvent 事件(同源情况下)。

window.addEventListener("storage",function(event) {
    console.log(event);
});
/**
event的属性:
key:该属性代表被修改的键值。当被clear()方法清除之后该属性值为null。(只读)
oldValue:该属性代表修改前的原值。在设置新键值对时由于没有原始值,该属性值为 null。(只读)  
newValue:修改后的新值。如果该键被clear()方法清理后或者该键值对被移除,,则这个属性为null。  
url:key 发生改变的对象所在文档的URL地址。(只读)
*/

最后

上面两个使用场景不太一样

第一个localStorage使用比较普遍,更加灵活,首推

第二个window.sessionStorage使用场景限制略多一些,毕竟也就比在内存中多活了一个窗口期,在某些特殊要求的场景有奇效,也比较适合一些有使用要求的场景