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?

Foi útil?

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)

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

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";
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top