Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/90.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript LocalStorage处理—如何验证用户是否从不同的浏览器或其他计算机进行了修改?_Javascript_Html_Local Storage - Fatal编程技术网

Javascript LocalStorage处理—如何验证用户是否从不同的浏览器或其他计算机进行了修改?

Javascript LocalStorage处理—如何验证用户是否从不同的浏览器或其他计算机进行了修改?,javascript,html,local-storage,Javascript,Html,Local Storage,情况就是这样 1) 用户(在家里的个人电脑上)正试图修改他的帖子,为此,我们以可编辑模式(编辑他自己的帖子)将他已经保存的内容从数据库加载到浏览器。他对他的帖子进行了修改,我们将他的数据存储在LocalStorage中。修改了其中的一部分后,他关闭了浏览器(没有将数据保存到数据库) 2) 来自不同计算机(可能来自office计算机)或不同浏览器的同一用户 他打开上面同样的帖子进行编辑,他看到了他的旧内容(因为他没有保存帖子)。他做了一些更改并保存了内容 3) 回到家后,他想再次修改同一篇文章并打

情况就是这样

1) 用户(在家里的个人电脑上)正试图修改他的帖子,为此,我们以可编辑模式(编辑他自己的帖子)将他已经保存的内容从数据库加载到浏览器。他对他的帖子进行了修改,我们将他的数据存储在LocalStorage中。修改了其中的一部分后,他关闭了浏览器(没有将数据保存到数据库)

2) 来自不同计算机(可能来自office计算机)或不同浏览器的同一用户 他打开上面同样的帖子进行编辑,他看到了他的旧内容(因为他没有保存帖子)。他做了一些更改并保存了内容

3) 回到家后,他想再次修改同一篇文章并打开它,但这次他从本地存储中获取数据,这是他在第一步编辑的数据。这是完全无效的数据。因为他已经在第二步修改了内容

你能告诉我我们如何删除第一步修改的数据,或者在这种情况下如何继续

我的一个想法是,在第一步中,LocalStorage中的数据还存储了按键的“时间戳”。再次从数据库加载数据时,请检查数据库中保存的时间戳和本地存储中的时间戳。如果少于服务器时间,请删除该帖子的LocalStorage密钥。但是有没有其他简单的方法来处理呢


谢谢

请确保在每次从数据库加载时,在清除该键存在的任何值后,首先重新填充localstorage(我假定您不希望任何无效数据。只需要从数据库中保存最新的数据,对吗?)。。现在,如果客户端有任何更改,则需要更新本地存储并从中读取

如果他从另一台机器上打开应用程序,请确保你在那里也这样做


基本上,为了防止数据损坏,总是在页面加载/AJAX调用时首先从DB读取数据,然后从localstorage读取数据。您必须知道,客户端数据总是可以被操作的。

我可以通过在数据库中为用户和post添加localstorage的输入键来解决这个问题。如果它是从其他计算机修改的,则密钥将被修改,因此第一台计算机中的条目将无效


感谢

这可能是他在论坛上的文章或他现有的博客文章或他自己的社论(任何数据…)如果客户端在两个不同的时刻在两个不同的脱机设备上以不同的方式更改相同的数据会怎么样?如果您想支持脱机模式,则需要某种验证来防止坏数据。如果localstorage将用于脱机支持,OP需要与用户确认(当应用程序联机时),需要使用哪个值(DB或客户端)。无论哪种方式,我都会假设,无论哪个实例更快地联机,都会将数据持久保存到数据库中,并且这些数据会反映。更重要的是,使用会话id之类的东西使密钥唯一总是很好的。不确定OP是否需要离线支持。很抱歉,我对@imguru感到困惑。如果用户总是从数据库加载,那么在这种情况下就没有本地存储的使用。我说的是这样一种情况:您让客户端更改从数据库中获取的值,并希望在刷新/浏览器关闭时保持更改,最终希望保留回数据库。如果您想在脱机模式下捕获本地更改,恐怕我所说的是无效的。对不起,我的意思是,如果用户从数据库获取更改,显然是为了刷新/浏览,close也从数据库获取更改。因此,这里没有本地存储。