Możesz rozwiązać ten problem bez bazy danych, ale nie poleciłbym tego. Zasadniczo masz pary (użytkownik, localStorage), a gdy dany użytkownik się zidentyfikuje, jego localStorage należy podać w sposób. Możesz powiedzieć użytkownikom, aby przechowali swoje lokalne magazyny na własnym komputerze, ale wtedy będą musieli skopiować je na inne maszyny, co jest pracochłonne i nigdy nie zyska popularności. Można ręcznie uruchomić fragment Javascript w konsoli przeglądarki, aby upewnić się, że localStorage ma swoje dane, a konieczność skopiowania localStorage na różne maszyny jest tylko nieznacznie łatwiejsza niż zrobienie tego ręcznie.
Możesz umieścić informacje localStorage zakodowane w adresie URL, ale oprócz problemu z długością adresu URL, który może stać się problemem i wciąż występującymi problemami z kodowaniem, całe localStorage może być monitorowane przez stronę trzecią, mającą dostęp do routera. Wiem, że powiedział, że dane te nie są wrażliwe, ale wierzę, że to nie jest wrażliwy jeszcze . Ale gdy użytkownicy skorzystają z tego, jeśli będzie to wygodne, będą również przechowywać poufne dane lub, Twoi klienci mogą mieć dla ciebie takie zadania, a nawet możesz zdać sobie sprawę, że musisz przechowywać dane, które nie są w 100% publiczne.
Poza tym w praktyce napotkasz bardzo poważne problemy z synchronizacją, to znaczy, że fajnie jest sprawić, że localStorage będzie agnostyczny, ale jaka jest prawdziwa wersja? Jeśli regularnie pracujesz nad 10 różnymi sesjami, synchronizacja localStorages staje się trudnym problemem. Oznacza to, że localStorage wymaga znacznika czasu.
Potrzebujesz więc centralnego miejsca, serwera do przechowywania ostatnio zapisanej wersji localStorage. Jeśli bazy danych unikają z jakichś niewiadomych powodów, możesz przechowywać localStorages w plikach identyfikujących użytkownika, takich jak
johndoe.json
a następnie musisz zaimplementować funkcję eksportu, która wyśle bieżący kod JSON użytkownika na serwer i zapisze go w pliku oraz funkcję importu, która pobierze plik przechowywany dla użytkownika i zapewni aktualizację localStorage odpowiednio. Możesz zrobić oba razem, implementując synchronizację.
Jak dotąd jest to proste, ale co zrobić, jeśli użytkownik ma już jakieś przydatne dane w swoim lokalnym localStorage i na serwerze? Najprostszym podejściem jest ominięcie siebie, ale które? Jeśli importujemy, to lokalny jest nadpisywany, jeśli eksportujemy, to ten na serwerze jest nadpisywany, jeśli synchronizujemy, starsze jest nadpisywane.
Jednak w niektórych przypadkach chcesz scalić dwa lokalne Magazyny tego samego użytkownika, więc:
nowe elementy
Uważam, że jeśli element jest nowy, należy w pewien sposób wiedzieć, że został utworzony w tej sesji, co warto wiedzieć, ponieważ oznacza to, że w innej sesji, z którą się łączymy, ten nowy element nie został usunięty i dlatego dodawanie go jest intuicyjne.
zmiany elementów
Jeśli ten sam element jest inny w obu przypadkach, wówczas powinna obowiązywać nowsza wersja.
usunięte elementy
Ciekawym przypadkiem jest to, że w jednej sesji został on usunięty, aw drugiej zaktualizowany. W tym przypadku myślę, że nowsza zmiana powinna mieć pierwszeństwo.
Jednak pomimo dołożenia wszelkich starań użytkownicy mogą nadal popsuć (i oprogramowanie również) rzeczy, więc tworzenie kopii zapasowej każdej sesji na serwerze ma sens.