Use LocalStorage entre subdomínios
-
26-09-2019 - |
Pergunta
Estou substituindo cookies por LocalStorage Nos navegadores que podem apoiá -lo (qualquer um, exceto). O problema é site.com e www.site.com Armazene seus próprios objetos de armazenamento local separados. Acredito que o WWW é considerado um subdomínio (uma decisão estúpida se você me perguntar). Se um usuário estava originalmente em site.com e decide digitar www.site.com Em sua próxima visita, todos os seus dados pessoais serão inacessíveis. Como faço para que todos os meus "subdomínios" compartilhem o mesmo armazenamento local do domínio principal?
Solução
É assim que eu uso em domínios ...
- Use um iframe do seu domínio pai - digamos Parent.com
- Em seguida, em cada domínio Child.com, basta fazer uma postagem para o seu parent.com iframe
- Tudo o que você precisa fazer é configurar um protocolo de como interpretar suas mensagens de postagem para conversar com o pai.com iframe.
Espero que ajude :)
Outras dicas
Se você está usando a solução IFrame e Postmessage apenas para esse problema em particular, acho que pode ser menos trabalho (em termos de código e em termos de computação) para apenas Armazene os dados em um biscoito sem subdomínio e, se ainda não estiver no LocalSorage On Load, pegue-o do cookie.
Prós:
- Não precisa da configuração extra do iframe e pós -maquiagem.
Contras:
- Disponibilizará os dados em todos os subdomínios (não apenas www), portanto, se você não confiar em todos os subdomínios, ele pode não funcionar para você.
- Enviará os dados para o servidor em cada solicitação. Não é ótimo, mas dependendo do seu cenário, talvez ainda menos trabalho do que a solução IFRAME/POSTMESSAGE.
- Se você está fazendo isso, por que não usar os cookies diretamente? Depende do seu contexto.
- 4K Max Cookie Tamanho, total em todos os cookies para o domínio (graças a Blake por apontar isso nos comentários)
Eu concordo com outros comentaristas, porém, parece que deve ser uma opção especificável para o LocalSorage, para que as arestas não sejam necessárias.
Sugiro que o site.com seja redirecionado para www.site.com para obter consistência e evitar problemas como esse.
Além disso, considere usar uma solução de navegador transversal como Persistjs que podem usar cada armazenamento nativo do navegador.
Estou usando o XDLOCALStorage, esta é uma biblioteca JS leve que implementa a interface localStorage e suporta armazenamento de domínio cruzado usando a comunicação do iframe Post Message. (Suporte do AngularJS)
Foi assim que eu resolvi para o meu site. Redirei todas as páginas sem www para www.site.com. Dessa forma, sempre levará o LocalSorage of www.site.com
Adicione o seguinte ao seu .htacess, (crie um se você já não o tiver) no diretório raiz
RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
Você pode simplesmente usar o document.domain
propriedade. Se você colocar isso nas primeiras ações do JavaScript:
document.domain="mysite.com";