использование localStorage в разных поддоменах


я заменяю куки на localStorage в браузерах, которые могут его поддерживать (любой, кроме IE). Проблема в том site.com и www.site.com храните свои собственные отдельные объекты localStorage. Я считаю, что www считается поддоменом (глупое решение, если вы спросите меня). Если пользователь изначально был на site.com и решает ввести www.site.com при ее следующем посещении все ее личные данные будут недоступный. Как мне получить все мои "поддомены" для совместного использования того же localStorage, что и основной домен?

6 60

6 ответов:

вот как я использую его в разных доменах...

  • используйте iframe из вашего родительского домена-скажем parent.com
  • затем на каждом child.com домен, как раз сделайте postMessage к вашему parent.com iframe
  • все, что вам нужно сделать, это настроить протокол, как интерпретировать ваши сообщения postMessage, чтобы поговорить с parent.com iframe.

надеюсь, это поможет:)

Если вы используете решение iframe и postMessage только для этой конкретной проблемы, я думаю, что это может быть меньше работы (как с точки зрения кода, так и с точки зрения вычислений), чтобы просто сохраните данные в файле cookie без поддомена и, если он еще не находится в localStorage при загрузке, возьмите его из файла cookie.

плюсы:

  • не требуется дополнительная настройка iframe и postMessage.

плюсы:

  • сделает данные доступными во всех поддоменах (не только www), поэтому, если вы не доверяете всем поддоменам, это может не сработать для вас.
  • будет отправлять данные на сервер по каждому запросу. Не очень хорошо, но в зависимости от вашего сценария, возможно, еще меньше работы, чем решение iframe/postMessage.
  • если вы делаете это, почему бы просто не использовать куки напрямую? Зависит от вашего контекста.
  • 4K максимальный размер файла cookie, всего по всем файлам cookie для домена (спасибо Блейку за указание на это в комментарии)

Я согласен с другими комментаторами, хотя, похоже, это должен быть определенный вариант для localStorage, поэтому обходные пути не требуются.

Я предлагаю сделать site.com перенаправление на www.site.com как для согласованности, так и для избежания подобных проблем.

кроме того, рассмотрите возможность использования кросс-браузер решение, как PersistJS который может использовать каждое собственное хранилище браузера.

Я использую xdLocalStorage, это легкая библиотека js, которая реализует интерфейс LocalStorage и поддерживает междоменное хранилище с помощью iframe post message communication.(поддержка angularJS)

https://github.com/ofirdagan/cross-domain-local-storage

вот как я решил это для моего сайта. Я перенаправил все страницы без www на www.site.com. таким образом, он всегда будет принимать localstorage www.site.com

добавьте к вашему .htacess, (создайте его, если у вас его уже нет) в корневом каталоге

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]

Вы можете просто использовать document.domain собственность. Если вы поместите это в первые действия JavaScript:

document.domain="mysite.com";