Vous pouvez résoudre ce problème sans base de données, mais je ne le recommanderais pas. Fondamentalement, vous avez des paires (utilisateur, localStorage) et lorsqu'un utilisateur donné s'identifie, son localStorage doit être fourni d'une manière. Vous pouvez dire aux utilisateurs de stocker leurs stockages locaux sur leur propre machine, mais ils devront ensuite les copier sur d'autres machines, ce qui demande beaucoup de travail et ne gagnera jamais en popularité. On pourrait exécuter manuellement un morceau Javascript dans la console de leur navigateur pour s'assurer que localStorage a leurs données et avoir à copier les machines localStorage sur les machines n'est que légèrement plus facile que de faire manuellement le tout.
Vous pouvez mettre les informations localStorage encodées dans une URL, mais en plus du problème de la longueur de l'URL, qui pourrait devenir un problème et des problèmes d'encodage toujours présents, tout votre localStorage peut être surveillé par un tiers ayant accès à votre routeur. Je sais que vous avez dit que les données n'étaient pas sensibles, mais je vous crois qu'elles ne le sont pas encore . Mais une fois que les utilisateurs l'utiliseront, si cela est pratique, ils stockeront également des données sensibles ou, vos clients pourraient avoir de telles tâches pour vous, ou même vous pourriez réaliser que vous devez y stocker des données qui ne sont pas 100% publiques.
En plus de cela, dans la pratique, vous serez confronté à de très graves problèmes de synchronisation, c'est-à-dire qu'il est agréable de rendre localStorage agnostique, mais alors, quelle est la vraie version? Si vous travaillez régulièrement sur 10 sessions différentes, la synchronisation des stockages locaux devient alors un problème difficile. Cela signifie que le localStorage doit être horodaté.
Ainsi, vous aurez besoin d'un emplacement central, d'un serveur pour stocker la dernière version de localStorage enregistrée. Si vous êtes évité par les bases de données pour des raisons inconnues, vous pouvez stocker localStorages dans des fichiers qui identifient l'utilisateur, comme
johndoe.json
puis, vous devrez implémenter une fonction d'exportation, qui enverra le JSON actuel de l'utilisateur au serveur et l'enregistrera dans un fichier et une fonction d'importation, qui téléchargera le fichier stocké pour l'utilisateur et s'assurera que localStorage est mis à jour en conséquence. Vous pouvez également faire les deux ensemble en implémentant une synchronisation.
C'est simple jusqu'à présent, mais que se passe-t-il si l'utilisateur dispose déjà de données utiles dans son localStorage local et sur le serveur? L'approche la plus simple consiste à remplacer l'une par l'autre, mais laquelle? Si nous importons, alors le local est remplacé, si vous exportez, celui sur le serveur est remplacé, si nous synchronisons, alors l'ancien est remplacé.
Cependant, dans certains cas, vous souhaitez fusionner deux stockages locaux du même utilisateur, donc:
nouveaux éléments
Je crois que si un élément est nouveau, il faut savoir d'une certaine manière qu'il a été créé dans cette session, ce qui est utile à savoir, car cela signifie que sur l'autre session avec laquelle nous fusionnons, ce nouvel élément n'a pas été supprimé et il est donc intuitif de l'ajouter.
changements d'éléments
Si le même élément est différent dans les deux cas, la nouvelle version devrait prévaloir.
éléments supprimés
Le cas intéressant est quand dans une session il a été supprimé et dans l'autre il a été mis à jour. Dans ce cas, je pense que le changement le plus récent devrait prévaloir.
Cependant, malgré tous vos efforts, les utilisateurs peuvent toujours gâcher (et votre logiciel aussi), il est donc logique de sauvegarder chaque session sur votre serveur.