Использовать localStorage через поддомены

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

Ответ 1

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

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

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

Ответ 2

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

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

Ответ 3

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

Плюсы:

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

Минусы:

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

document.domain="mysite.com";