157 votes

Utiliser localStorage dans les sous-domaines

Je remplace les cookies par stockage local sur les navigateurs qui le supportent (tous sauf IE). Le problème est le suivant site.example y www.site.example stockent leurs propres objets localStorage. Je crois que www est considéré comme un sous-domaine (une décision stupide si vous voulez mon avis). Si un utilisateur était à l'origine sur site.example et décide de taper www.site.example lors de sa prochaine visite, toutes ses données personnelles seront inaccessibles. Comment faire pour que tous mes "sous-domaines" partagent le même localStorage que le domaine principal ?

136voto

Mayank Jain Points 555

Voici comment je l'utilise pour tous les domaines...

  • Utilisez un iframe de votre domaine parent - par exemple parent.example
  • Ensuite, sur chaque child.example il suffit d'envoyer un postMessage à votre domaine parent.example iframe
  • Tout ce que vous avez à faire est d'établir un protocole sur la façon d'interpréter vos messages postMessage pour parler à l'outil parent.example iframe.

57voto

Matt Points 404

Si vous utilisez la solution iframe et postMessage uniquement pour ce problème particulier, je pense qu'il serait moins fastidieux (à la fois en termes de code et de calcul) de se contenter de stocker les données dans un cookie sans sous-domaine et, si elles ne sont pas déjà dans localStorage au chargement, les récupérer dans le cookie .

Pour :

  • N'a pas besoin de l'iframe et du postMessage supplémentaires.

Cons :

  • Les données seront disponibles pour tous les sous-domaines (pas seulement www). Si vous ne faites pas confiance à tous les sous-domaines, il se peut que cela ne vous convienne pas.
  • Envoie les données au serveur à chaque demande. Ce n'est pas génial, mais selon votre scénario, cela représente peut-être moins de travail que la solution iframe/postMessage.
  • Dans ce cas, pourquoi ne pas utiliser directement les cookies ? Cela dépend du contexte.
  • 4K max cookie size, total across all cookies for the domain (Merci à Blake de l'avoir signalé dans les commentaires)

Je suis d'accord avec les autres commentateurs, il semble que cela devrait être une option spécifiable pour localStorage afin que des solutions de contournement ne soient pas nécessaires.

41voto

Eran Galperin Points 49594

Je suggère de faire site.example rediriger vers www.site.example 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 qui peut utiliser le stockage natif de chaque navigateur.

19voto

URL87 Points 1689

Défini comme cookie dans le domaine principal :

document.cookie = "key=value;domain=.mydomain.example"

puis prendre les données de n'importe quel domaine principal ou sous-domaine et les placer dans le localStorage

4voto

biology.info Points 91

J'utilise xdLocalStorage, une bibliothèque js légère qui met en œuvre l'interface LocalStorage et prend en charge le stockage interdomaines en utilisant la communication post-message iframe (prise en charge angularJS).

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X