您可以在没有数据库的情况下解决此问题,但我不建议您这样做。基本上,您有(用户,localStorage)对,并且当给定用户标识自己时,应该以某种方式提供他/她的localStorage。您可以告诉用户将本地存储存储在自己的计算机上,但是随后他们将不得不将其复制到其他计算机上,这是劳动密集型的,并且永远不会普及。可以在其浏览器的控制台中手动运行Javascript块,以确保localStorage拥有其数据,并且必须跨机器复制localStorage仅比手动完成整个过程要容易一些。
您可以将localStorage信息编码为URL,但是除了URL长度的问题(可能会成为问题以及永远存在的编码问题)之外,您的整个localStorage都可以由访问路由器的第三方监视。我知道你说的数据是不敏感的,但我相信你,这是不敏感尚未。但是一旦用户使用它,如果方便的话,他们也将存储敏感数据,或者,您的客户可能为您执行了此类任务,甚至您可能意识到您需要在此存储不是100%公开的数据。
除此之外,在实践中,您还将面临非常严重的同步问题,也就是说,使localStorage不可知是一件好事,但是什么才是真正的版本?如果您定期进行10个不同的会话,那么同步localStorage就会成为一个难题。这意味着需要对localStorage加上时间戳。
因此,您将需要一个中央位置,一台服务器来存储上次保存的localStorage版本。如果由于某些未知原因而被数据库避免,则可以将localStorages存储在标识用户的文件中,例如
johndoe.json
然后,您将需要实现导出功能,该功能会将用户的当前JSON发送到服务器并将其保存到文件中,并具有导入功能,该功能将下载为用户存储的文件并确保localStorage得到更新相应地。您也可以将两者一起进行,以实现同步。
到目前为止,这很简单,但是如果用户在其本地localStorage内部和服务器上已经有一些有用的数据,该怎么办?最简单的方法是将另一个覆盖,但是哪个覆盖?如果要导入,则将覆盖本地的一个,如果要导出,则将覆盖服务器上的一个,如果我们进行同步,则将覆盖较旧的一个。
但是,在某些情况下,您希望合并同一用户的两个localStorage,因此:
新元素
我认为,如果一个元素是新元素,则应该以某种方式知道它是在本届会议上创建的,这很有用,因为这意味着在我们正在与之合并的另一届会议上,这一新项目并未被删除。因此添加它很直观。
元素变化
如果在两种情况下相同的元素不同,则应以较新的版本为准。
删除的元素
有趣的情况是,在一个会话中将其删除而在另一会话中将其更新。在这种情况下,我认为应该以较新的更改为准。
但是,尽管您尽了最大的努力,但用户可能仍然会弄乱(以及您的软件),因此备份服务器上的每个会话都是有意义的。