Вы можете решить это без базы данных, но я бы не рекомендовал это. По сути, у вас есть пары (user, localStorage), и когда данный пользователь идентифицирует себя, его / ее localStorage должны быть предоставлены таким образом. Вы можете попросить пользователей хранить свои локальные хранилища на своем собственном компьютере, но тогда им придется скопировать его на другие машины, что является трудоемким и никогда не приобретет популярность. Можно вручную запустить блок Javascript в консоли своего браузера, чтобы убедиться, что у localStorage есть свои данные, и копировать localStorage на разных компьютерах лишь немного проще, чем делать все вручную.
Вы можете поместить информацию о localStorage, закодированную в URL-адрес, но помимо проблемы длины URL-адреса, которая может стать проблемой, и постоянных проблем с кодированием, весь ваш localStorage может контролироваться третьей стороной, имеющей доступ к вашему маршрутизатору. Я знаю , что вы сказали , что данные не чувствительны, но я считаю, что это не чувствительно еще . Но как только пользователи будут использовать это, если это удобно, они также будут хранить конфиденциальные данные, или у ваших клиентов могут быть такие задачи для вас, или даже вы можете понять, что вам нужно хранить там данные, которые не являются 100% общедоступными.
Помимо этого, на практике вы столкнетесь с очень серьезными проблемами синхронизации, то есть все хорошо, чтобы сделать localStorage независимым, но тогда, какова реальная версия? Если вы регулярно работаете над 10 различными сессиями, то синхронизация localStorages становится трудной проблемой. Это означает, что localStorage должен иметь метку времени.
Итак, вам понадобится центральное место, сервер для хранения последней сохраненной версии localStorage. Если вы по каким-то неизвестным причинам предотвратили базы данных, вы можете хранить локальные хранилища внутри файлов, которые идентифицируют пользователя, например
johndoe.json
и затем вам нужно будет реализовать функцию экспорта, которая будет отправлять текущий JSON пользователя на сервер и сохранять его в файл, а функция импорта будет загружать файл, сохраненный для пользователя, и обеспечивать обновление localStorage. соответственно. Вы также можете сделать это вместе, реализовав синхронизацию.
Пока это просто, но что, если у пользователя уже есть некоторые полезные данные внутри его локального localStorage, а также на сервере? Самый простой подход - переопределить одно на другое, но какой? Если мы импортируем, то локальный переопределяется, если экспортируется, то перезаписывается тот, что на сервере, если мы синхронизируемся, то перезаписывается более старый.
Однако в некоторых случаях вы хотите объединить два локальных хранилища одного и того же пользователя, поэтому:
новые элементы
Я полагаю, что если элемент является новым, он должен каким-то образом знать, что он был создан в этом сеансе, что полезно знать, поскольку это означает, что в другом сеансе, с которым мы объединяемся, этот новый элемент не был удален и, следовательно, добавить его интуитивно понятно.
изменения элемента
Если один и тот же элемент отличается в обоих случаях, то более новая версия должна иметь преимущественную силу.
удаленные элементы
Интересный случай, когда в одном сеансе он был удален, а в другом - обновлен. В этом случае я думаю, что более новое изменение должно преобладать.
Тем не менее, несмотря на все ваши усилия, пользователи могут все еще испортить (и ваше программное обеспечение) вещи, поэтому имеет смысл создавать резервные копии каждой сессии на вашем сервере.