У меня есть простая веб-страница, на которой используются клиентские скрипты для хранения нескольких пользовательских конфигураций в локальном хранилище браузера. (Статус флажков, раскрытых / свернутых меню и т. д.)
У меня есть кнопка Patreon на моей веб-странице. Когда пользователь нажимает на нее, браузер пользователя переходит на страницу аутентификации Patreon, и, если пользователь нажимает кнопку, чтобы предоставить мне доступ к своему статусу поддержки пользователей, Patreon перенаправляет свой браузер на маршрут на моем сайте, где я записываю их статус поддержки и затем перенаправьте их обратно на мою домашнюю страницу.
Когда пользователь, наконец, возвращается на мою домашнюю страницу, все данные в локальном хранилище пользователя отсутствуют. Если пользователь нажимает «Обновить» после возвращения на мой сайт, локальное хранилище все еще отсутствует. Однако, если они закроют вкладку и откроют мой сайт на новой вкладке (или перейдут на другой сайт, а затем вернутся обратно на той же вкладке), исходные значения локального хранилища снова будут видны.
Я понимаю, что локальное хранилище браузера связано с источником локального хранилища. https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage
Я подтвердил, что и протокол (https), и домен идентичны для точки, в которой установлено хранилище, и точки, когда пользователь возвращается на мой сайт. Я также подтвердил, что окончательный маршрут приземления идентичен.
домашняя страница, на которой изначально установлены значения локального хранилища: https://www.example.com/page1
последняя целевая страница: https://www.example.com/page1
Я заметил, что если я остановлю пользователя на маршруте перенаправления Patreon (где Patreon изначально перенаправляет пользователей и где я записываю статус поддержки пользователей), открытие отладчика браузера и выдача document.domain дает: ""
Однако установка document.domain и обновления не восстанавливает локальное хранилище.
Я наблюдаю такое поведение как в Firefox 63.0.3 (64-бит), так и в Chrome 71.0.3578.80 (64-бит).
Есть идеи, что мне может не хватать?
[EDIT] Вот код, который я использую для записи состояния пользователя в локальное хранилище:
if (localStorage.userOptions){ restoreOptsFromLocal(); }
else{ persistOptsToLocal(); }
...
restoreOptsFromLocal = function(){
opts = JSON.parse(localStorage.getItem('userOptions'));
}
persistOptsToLocal = function(){
localStorage.setItem('userOptions', JSON.stringify(opts));
}
Конечно, добавлено как правка выше. Там немногое, чб. opts - это объект javascript с несколькими атрибутами. Кроме того, я подтвердил, что элемент локального хранилища существует до того, как пользователь уйдет на Patreon.
Вы проверяете наличие localStorage.getItem('userOptions') перед тем, как писать на него? Это может быть то, что его уничтожает.
Да, я добавлю полный код. Я уверен, что элементы локального хранилища сохраняются и не перезаписываются моим кодом. Я без проблем использую и отлаживаю страницу уже несколько месяцев. Проблема возникла совсем недавно, когда я добавил кнопку Patreon. Кроме того, если пользователь закрывает вкладку и открывает мою страницу в новой вкладке, исходные объекты локального хранилища появляются снова. Я действительно подозреваю, что с кортежем протокол-домен-порт во время перенаправления происходит некоторая странность, но я не уверен.
Как скоро после сохранения на localStorage вы будете выполнять перенаправление с помощью Patreon? сохранение в localStorage - это асинхронный вызов, поэтому, если оба события происходят одновременно, он не сохранит его вовремя. Если да, можете использовать window.onbeforeunload = function() {localStorage.setItem()}
Интересный. Не думал, что запись в localStorage будет асинхронной. Но данные определенно сохраняются. Чтение / запись в localStorage происходит сразу же при инициализации страницы, а перенаправление из Patreon происходит только тогда, когда пользователь нажимает кнопку Patreon. Эти два события можно разделить на любое время. От 5 секунд до 10 минут и более. И снова, если пользователь закрывает вкладку и открывает мою страницу на новой вкладке, старые значения localStorage (записанные до того, как пользователь перешел на Patreon) снова появляются со всеми значениями, установленными там, где пользователь их оставил.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Потратил несколько часов на поиски и отладку, но до сих пор не понял первопричину. Текущий обходной путь - установить для Patreon href target значение «_blank», чтобы процесс аутентификации patreon происходил в отдельном окне.
Моя первая мысль заключается в том, что ваше локальное хранилище не настроено для работы по http / https, но вы подтвердили, что пользователь начинается с https и заканчивается на https. Вы на 100% уверены, что протокол правильный? Редирект ничего не должен делать, но, возможно, ваш код очищает локальное хранилище при загрузке страницы? Можете ли вы поделиться той частью вашего кода, которую вы сохраняете в локальное хранилище?