utiliser localStorage à travers les sous domaines

Je remplace les cookies par localStorage sur les navigateurs qui peuvent le supporter (n'importe qui sauf IE). Le problème est site.com et www.site.com magasin de leur propre localStorage objets. Je crois que www est considéré comme un sous-domaine (une décision stupide si vous me demandez). Si un utilisateur a été à l'origine sur site.com et décide de taper dans www.site.com sur sa prochaine visite, toutes les données personnelles seront inaccessibles. Comment puis-je récupérer mon "sous-domaines" pour partager le même localStorage que le domaine principal?

60
demandé sur JoJo 2010-10-26 21:56:16

6 réponses

Voici comment je l'utilise à travers les domaines...

  • Utilisez un iframe de votre domaine parent-disons parent.com
  • puis sur chaque child.com domaine, il suffit de faire un postMessage à votre parent.com iframe
  • Tout ce que vous devez faire est de configurer un protocole sur la façon d'interpréter vos messages postMessage pour parler au parent.com iframe.

J'espère que cela aide :)

62
répondu Mayank Jain 2011-10-11 06:48:34

Si vous utilisez la solution iframe et postMessage juste pour ce problème particulier, je pense qu'il pourrait être moins de travail (à la fois en termes de code et de calcul) de simplement stocker les données dans un cookie sans sous-domaine et, si ce n'est pas déjà dans localStorage en charge, récupérez-le dans le cookie .

Avantages:

  • n'a pas besoin de la configuration supplémentaire iframe et postMessage.

Inconvénients:

  • rendra les données disponibles dans tous les sous-domaines (pas seulement www), donc si vous ne faites pas confiance à tous les sous-domaines, cela peut ne pas fonctionner pour vous.
  • enverra les données au serveur à chaque requête. Pas génial, mais en fonction de 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? Dépend de votre contexte.
  • Taille de cookie 4K max, total de tous les cookies pour le domaine (Merci à Blake pour le souligner dans les commentaires)

Je suis d'accord avec d'autres commentateurs cependant, ceci on dirait que cela devrait être une option spécifiable pour localStorage, donc les solutions de contournement ne sont pas nécessaires.

22
répondu Matt 2015-08-27 16:12:23

Je suggère de faire site.com rediriger vers www.site.com pour la cohérence et pour éviter des problèmes comme celui-ci.

Envisagez également d'utiliser une solution multi-navigateurs comme PersistJS qui peut utiliser le stockage natif de chaque navigateur.

19
répondu Eran Galperin 2010-10-26 18:00:55

J'utilise xdLocalStorage, c'est une bibliothèque JS légère qui implémente L'interface LocalStorage et prend en charge le stockage cross domain en utilisant la communication de message post iframe.( support angularJS)

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

3
répondu biology.info 2015-12-10 14:07:35

Voici comment je l'ai résolu pour mon site. J'ai redirigé toutes les pages sans www à www.site.com. de cette façon, il faudra toujours localstorage de www.site.com

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

RewriteEngine On
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ http://www.%{HTTP_HOST}/$1 [R=301,L]
-1
répondu Ayush Baheti 2017-03-22 08:31:18

Vous pouvez simplement utiliser la propriété document.domain. Si vous mettez cela dans les premières actions de JavaScript:

document.domain="mysite.com";
-12
répondu chapov 2012-12-19 22:44:14