如何防止localStorage和sessionStorage在开发者工具中被手动修改?

写在前面:        

        如果你使用的localStorage的值不希望被修改的话,最好是一个静态的值,也就是它放在localStorage中之后就不会被你的代码更改了。如果你是在localStorage中放置一个用于标识登录状态的变量,比如:connected == 1代表登录,connected == 0代表未登录,那么这也就意味着你的代码中肯定会修改这个connected的值,那么这个时候,connected变量就不适用这个方法,因为用了之后这个变量会一直闪烁,出现莫名其妙的问题。

        我写的项目使用到了localStorage进行判断当前用户是否已经登录,我没有用到token,我觉得这种方式也能实现,就自己想到用这种方法,如果用户没有断开登录,即使新开一个标签页,也可以保持之前的登录状态,避免用户多次登录,影响使用体验。

        如题,我想介绍的方式是防止用户从浏览器的开发者工具中(chrome是application中进行查看localStorage和sessionStorage)对local和session(下均这二者均简称为local和session)进行手动修改。

        如果你使用的是vue的话,在main.js加上这几行代码即可解决你的问题,简单粗暴!

代码如下所示:

        说明:这段代码是针对所有在local和session中的变量而言的,你也可以自己指定需要哪个变量不被更改,比如你有个变量叫language,那么你就:

                if(e.key == 'language'){    localStorage.setItem(e.key,e.oldValue)    }

// 防止localStorage被修改
window.addEventListener('storage', function(e) {
    localStorage.setItem(e.key, e.oldValue)
});
// 防止sessionStorage被修改
window.addEventListener('storage', function(e) {
    this.sessionStorage.setItem(e.key, e.oldValue)
});

具体在main.js中的整体位置,注意不要放错地方:

       原理就是:你换新值是吧,行啊,劳资用旧值来覆盖你!气死你!诶~改不了了吧~~~

         由于我在代码中也用使用:window.sessionStorage.setItem或者是window.localStorage.setItem对local和session进行修改,原本以为上面这种方式会影响代码中的这种修改值的操作,但实际上并不影响,所以我可以得出结论:这种方式就是防止用户在下面这里自己修改local和session:

 实现的效果如下的gif所示:

 喜欢的点个赞哦!我也是参考的其他人的方法,踩在巨人的肩膀上嘛哈哈哈

11月22日更新:

这种方式对于代码中修改local和session的值也有影响,也就是说,如果你代码中需要更改local和session的值的话,看文章开头给出的,最好是应用于一个不会被修改的静态的值。

`sessionStorage` 和 `localStorage` 都是浏览器提供的两种用于存储数据的数据存储机制,但它们之间有几个关键区别: 1. 存储生命周期: - **sessionStorage**: 这些数据仅在用户会话期间(即打开浏览器标签页或窗口期间)有效。一旦页面会话结束(例如,关闭标签页或浏览器),存储的数据就会被删除。 - **localStorage**: 存储的数据持久化,即使在用户离开网站后关闭浏览器,数据也会保留,直到用户主动清除或清除浏览器缓存。 2. 数据大小限制: - **sessionStorage**: 通常每个键值对的大小有限制,具体取决于浏览器的实现,但通常小于5MB。 - **localStorage**: 大小限制通常比sessionStorage大,但也可能因浏览器而异,通常也是有限的。 3. 数据隐私: - `sessionStorage`:由于其短暂性,不适合存储敏感信息,因为它们可能会被第三方访问或记录。 - `localStorage`: 在默认情况下,数据对所有脚本都是可访问的,包括跨域脚本,所以应谨慎使用,特别是涉及隐私的数据。 4. 清除方式: - 对于`sessionStorage`,数据会在会话结束时自动清除,但也可以通过JavaScript手动清除。 - 对于`localStorage`,可以使用`clear()`方法手动清除,也可以设置过期日期,但过期时间由浏览器决定而不是开发者。 相关问题: 1. 何时更适合使用`sessionStorage`而不是`localStorage`? 2. 如何在JavaScript清除`sessionStorage`或`localStorage`? 3. 清除`localStorage`后,数据是否会立即消失?
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值