использование localStorage в разных поддоменах
я заменяю куки на localStorage в браузерах, которые могут его поддерживать (любой, кроме IE). Проблема в том site.com и www.site.com храните свои собственные отдельные объекты localStorage. Я считаю, что www считается поддоменом (глупое решение, если вы спросите меня). Если пользователь изначально был на site.com и решает ввести www.site.com при ее следующем посещении все ее личные данные будут недоступный. Как мне получить все мои "поддомены" для совместного использования того же localStorage, что и основной домен?
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)
вот как я решил это для моего сайта. Я перенаправил все страницы без www на www.site.com. таким образом, он всегда будет принимать localstorage www.site.com
добавьте к вашему .htacess, (создайте его, если у вас его уже нет) в корневом каталоге
RewriteEngine On RewriteCond %{HTTP_HOST} !^www\. [NC] RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/ [R=301,L]