web-dev-qa-db-fra.com

utiliser localStorage à travers les sous-domaines

Je remplace les cookies par localStorage sur les navigateurs pouvant le prendre en charge (toute personne autre que IE). Le problème est que site.com et www .site.com stockent leurs propres objets distincts LocalStorage. Je crois que www est considéré comme un sous-domaine (une décision stupide si vous me le demandez). Si une utilisateur était initialement sur site.com et décide de taper www .site.com lors de sa prochaine visite, toutes ses données personnelles seront inaccessibles. Comment faire en sorte que tous mes "sous-domaines" partagent le même localStorage que le domaine principal?

66
JoJo

C'est comme ça que je l'utilise sur plusieurs domaines ...

  • Utilisez un iframe de votre domaine parent - par exemple parent.com 
  • Ensuite, sur chaque domaine child.com, il suffit de faire un postMessage sur votre iframe parent.com 
  • Tout ce que vous avez à faire est de configurer un protocole expliquant comment interpréter vos messages postMessage afin de pouvoir parler à iframe de parent.com.

J'espère que ça aide :)

69
Mayank Jain

Si vous utilisez les solutions iframe et postMessage uniquement pour ce problème particulier, je pense que le travail de stocker les données dans un cookie sans sous-domaine et moins) peut être moins fastidieux (à la fois en termes de code et de calcul). il n'est pas déjà dans le stockage local au chargement, récupérez-le dans le cookie} _.

Avantages:

  • N'a pas besoin des extra iframe et postMessage mis en place.

Les inconvénients:

  • Les données seront disponibles dans tous les sous-domaines (pas seulement www). Par conséquent, si vous ne faites pas confiance à tous les sous-domaines, cela risque de ne pas fonctionner pour vous. 
  • Enverra les données au serveur à chaque demande. Pas génial, mais selon votre scénario, peut-être encore moins de travail que la solution iframe/postMessage.
  • Si vous faites cela, pourquoi ne pas simplement utiliser les cookies directement? Cela dépend de votre contexte.
  • 4K maximum de taille de cookie, total pour tous les cookies du domaine (Merci à Blake de l'avoir signalé dans les commentaires)

Je suis d'accord avec les autres commentateurs cependant, il semble que cela devrait être une option spécifiable pour le stockage local, de sorte que les solutions de rechange ne soient pas nécessaires.

24
Matt

Je suggère de rediriger site.com vers www.site.com pour des raisons de cohérence et pour éviter des problèmes de ce type.

Pensez également à utiliser une solution multi-navigateurs telle que PersistJS pouvant utiliser le stockage natif de chaque navigateur.

23
Eran Galperin

J'utilise xdLocalStorage, il s'agit d'une bibliothèque JS légère qui implémente l'interface LocalStorage et prend en charge le stockage entre domaines à l'aide de la communication après message iframe.

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

3
biology.info

Voici comment je l'ai résolu pour mon site web. J'ai redirigé toutes les pages sans www vers www.site.com. De cette façon, le stockage local de www.site.com sera toujours nécessaire. 

Ajoutez ce qui suit à votre .htacess , (créez-en un si vous ne l'avez pas déjà) dans le répertoire racine

RewriteEngine On
RewriteCond %{HTTP_Host} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_Host}/$1 [R=301,L]
0
Ayush Baheti