Ви можете вирішити це без бази даних, але я б не рекомендував це. В основному у вас є (користувач, localStorage) пари, і коли даний користувач ідентифікує себе, його / її localStorage має надаватися певним чином. Ви можете сказати користувачам зберігати свої місцеві сховища на власній машині, але тоді їм доведеться скопіювати їх на інші машини, що трудомістко і ніколи не набере популярності. Можна було вручну запустити фрагмент Javascript у консолі свого браузера, щоб переконатися, що localStorage має свої дані, а копіювати локальні сховища на всіх машинах лише трохи легше, ніж робити всю справу вручну.
Ви можете розмістити закодовану інформацію localStorage в URL-адресі, але, крім проблеми довжини URL-адреси, яка може стати проблемою, і наявних проблем із кодуванням, ваш весь localStorage може контролюватися третьою стороною, маючи доступ до маршрутизатора. Я знаю , що ви сказали , що дані не чутливі, але я вважаю, що це не відчутно ще . Але коли користувачі використовуватимуть це, якщо це зручно, вони також зберігатимуть конфіденційні дані, або ваші клієнти можуть мати такі завдання для вас, або навіть ви зрозумієте, що вам потрібно зберігати там дані, які не є на 100% загальнодоступними.
Крім цього, на практиці ви зіткнетеся з дуже серйозними питаннями синхронізації, тобто все приємно зробити localStorage агностиком, але тоді, яка реальна версія? Якщо ви регулярно працюєте над 10 різними сеансами, то синхронізація локальних сховищ стає важкою проблемою. Це означає, що місцеве сховище потрібно маркувати за часом.
Отже, вам знадобиться центральне місце, сервер для зберігання останньої збереженої версії localStorage. Якщо ви з якихось незвіданих причин відхиляєтесь базами даних, ви можете зберігати localStorages у файлах, що ідентифікують користувача, наприклад
johndoe.json
а потім вам потрібно буде реалізувати функцію експорту, яка надішле поточний JSON користувача на сервер і збереже його у файл та функцію імпорту, яка завантажить збережений для користувача файл та забезпечить оновлення localStorage відповідно. Ви також можете зробити це разом, здійснивши синхронізацію.
Наразі це просто, але що робити, якщо користувач вже має корисні дані всередині свого локального локального сховища та на сервері? Найпростіший підхід - перекрити одне з іншим, але який? Якщо ми імпортуємо, то локальний - це переопределено, якщо експортується, то той на сервері буде переопрацьований, якщо ми синхронізуємо, то старіший буде замінений.
Однак у деяких випадках потрібно об'єднати два локальнихмагазини одного користувача, так що:
нові елементи
Я вважаю, що якщо елемент новий, слід якось знати, що він був створений на цьому сеансі, що корисно знати, оскільки це означає, що на іншому сеансі, з яким ми зливаємося, цей новий елемент не був видалений а отже, додати його інтуїтивно.
зміни елементів
Якщо один і той же елемент відрізняється в двох випадках, тоді повинна переважати нова версія.
вилучені елементи
Цікавий випадок, коли в одному сеансі його було видалено, а в іншому оновлено. У цьому випадку я думаю, що новіші зміни повинні переважати.
Однак, незважаючи на ваші зусилля, користувачі можуть все-таки зіпсувати (і ваше програмне забезпечення) речі, тому резервне копіювання кожного сеансу на вашому сервері має сенс.