如何避免localStorage存储的值被修改

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何避免localStorage存储的值被修改相关的知识,希望对你有一定的参考价值。

参考技术A html5 localstorage路径是固定的不可以修改,只能读取数据的。
localStorage作为HTML5本地存储web storage特性的API之一,主要作用是将数据保存在客户端中,而客户端一般是指上网用户的计算机。在移动设备上,由于大部分浏览器都支持web storage特性,因此在androidios等智能手机上的web浏览器都能正常使用该特性。 localStorage保存的数据,一般情况下是永久保存的,也就是说只要采用localstorage保存信息,数据便一直存储在用户的客户端中。即使用户关闭当前web浏览器后重新启动,数据让然存在。知道用户或程序明确制定删除,数据的生命周期才会结束。在安全性方面,localstorage是域内安全的,即localstorage是基于域的。任何在该域内的所有页面,都可以访问localstorage数据。但让然存在一个问题,就是各个浏览器厂商的浏览器之间的数据是各自独立的。也就是说,如果在firefox中使用localstorage存储一组数据,在chrome浏览器下是无法读取的。同样,由于localstorage数据是保存在用户的设备中的,因此同一个应用程序在不同设备上保存的数据是不同的。

如何更改 localStorage 项目中的单个值?

【中文标题】如何更改 localStorage 项目中的单个值?【英文标题】:How do I change a single value inside a localStorage item? 【发布时间】:2011-11-08 01:34:11 【问题描述】:

我正在尝试更改本地存储中的值。此项目是复选框的状态。我希望,每次选中一个复选框以将该复选框的值设置为 true 或 false。我尝试了很多方法,直到我意识到不使用 JSON 就无法更改值。

添加我使用的值:

localStorage.setItem("status-" + i, $status.is(":checked"));

并删除我使用:

var parentId = $this.parent().attr('id');
localStorage.removeItem("'" + parentId + "'");

现在要更改我尝试过的值:

$itemList.delegate("#status-" + i, 'click', function(e) 

                var $this = $(this);
                var parentId = this.parent().attr('id');            

                if ($this.is(":checked"))  

                    localStorage.setItem("'" + parentId + "'".val("fdgsdagf"));
                    // Note that alert here works.

                
);

这是我的本地存储的样子: 我希望有人能帮助我。这几天我一直在努力...

非常感谢

【问题讨论】:

【参考方案1】:

setItem 有两个参数:

localStorage.setItem('status-1', "'" + parentId + "'".val("fdgsdagf"));

或更可能适合您的情况:

localStorage.setItem(parentId, "fdgsdagf");

最佳实践:

localStorage.setItem('key', JSON.stringify(value));
JSON.parse(localStorage.getItem('key'));

这是一个例子:http://jsfiddle.net/F8sF2/

编辑:从你的小提琴,你需要改变:

var parentId = this.parent().attr('id');    

var parentId = $this.attr('id');    

更新http://jsfiddle.net/CC5Vw/1/

【讨论】:

不幸的是,两者都不起作用。我也对它们进行了调整,以防任何类似的工作,但又没有任何工作。 ***.com/questions/7207337/… 在这篇文章中,有人说没有 JSON 就无法更改项目的值。但他这样做的方式有点令人困惑。谢谢 我想你会想要$this.attr('id'),而不是父母 但它不会改变状态的值。检查:fiddle.jshell.net/CC5Vw/1/show with firebug。 这并不能真正回答 OP 提出的问题。【参考方案2】:

试试这个

localStorage.setItem(parentId, "fdgsdagf");

localStorage 只不过是 JavaScript 对象,您可以将它们视为关联数组。所以你可以像这样使用它们。

设定值

localStorage[parentId] = "fdgsdagf";

获取价值

var status = localStorage[parentId];

【讨论】:

我想我需要使用'i',因为我有“var i = Number(localStorage.getItem('todo-counter')) + 1”,这样每次复选框都会增加价值。谢谢

以上是关于如何避免localStorage存储的值被修改的主要内容,如果未能解决你的问题,请参考以下文章

避免雪花中存储过程的重复

计算属性取决于 vuex 存储。如何更新缓存的值?

web存储

localstorage - HTML 5 Web 存储总结---凡尘

localstorage - HTML 5 Web 本地存储总结

VueJS - 如何查看 localStorage 中的值?