использовать localStorage для разных поддоменов - PullRequest
73 голосов
/ 26 октября 2010

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

Ответы [ 6 ]

73 голосов
/ 11 октября 2011

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

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

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

29 голосов
/ 22 января 2015

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

Плюсы:

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

Минусы:

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

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

26 голосов
/ 26 октября 2010

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

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

3 голосов
/ 10 декабря 2015

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

0 голосов
/ 22 марта 2017

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

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

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
0 голосов
/ 20 декабря 2012

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

document.domain="mysite.com";
...