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