Un ordinateur avec du code affiché à l'écran.

Stocker des données localement avec localStorage et sessionStorage

Publié le

Les navigateurs proposent deux objets très pratiques pour stocker des données côté client : localStorage et sessionStorage. Ils permettent de conserver des informations (comme les préférences utilisateur, un panier d'achat, ou un état d'application) sans avoir à utiliser de base de données ou de serveur. Cet article vous explique tout ce qu'il faut savoir pour les maîtriser.

📦 Qu'est-ce que le Web Storage ?

Le Web Storage (stockage web) est une API JavaScript qui permet de sauvegarder des paires clé/valeur directement dans le navigateur. Les données ne sont jamais envoyées au serveur, contrairement aux cookies. Deux objets implémentent cette API :

  • localStorage – persiste sans date d'expiration. Les données restent même après la fermeture du navigateur.
  • sessionStorage – vit le temps de la session (onglet ou fenêtre). Dès que l'onglet est fermé, les données sont effacées.

🛠️ Les méthodes essentielles

Les deux objets partagent les mêmes méthodes. Voici comment les utiliser :

// Sauvegarder une donnée
localStorage.setItem('nom', 'Alice');
sessionStorage.setItem('theme', 'sombre');

// Récupérer une donnée
const nom = localStorage.getItem('nom');       // "Alice"
const theme = sessionStorage.getItem('theme'); // "sombre"

// Supprimer une donnée précise
localStorage.removeItem('nom');

// Supprimer toutes les données du stockage
localStorage.clear();

Les valeurs sont toujours des chaînes de caractères. Pour stocker des objets ou des tableaux, il faut les convertir en JSON (voir plus bas).

🧠 Stocker des objets et tableaux

localStorage ne comprend que le texte. Pour enregistrer un objet, utilisez JSON.stringify() avant setItem(), puis JSON.parse() pour le récupérer.

const utilisateur = {
  id: 1,
  nom: 'Dupont',
  preferences: { langue: 'fr', notifications: true }
};

// Stockage
localStorage.setItem('utilisateur', JSON.stringify(utilisateur));

// Récupération
const utilisateurStocke = JSON.parse(localStorage.getItem('utilisateur'));
console.log(utilisateurStocke.preferences.langue); // "fr"

Cette technique fonctionne aussi pour les tableaux, les dates (converties en string), ou tout objet sérialisable.

⏳ Différence entre localStorage et sessionStorage

Le tableau ci-dessous résume leurs différences :

  • Durée de vie : localStorage → permanente (jusqu'à suppression manuelle ou via code). sessionStorage → jusqu'à fermeture de l'onglet.
  • Partage entre onglets : localStorage → oui, entre tous les onglets d'une même origine. sessionStorage → non, chaque onglet a son propre espace.
  • Capacité : environ 5 à 10 Mo par origine (selon navigateur), pour les deux.

Exemple concret : Pour un formulaire en plusieurs étapes, utilisez sessionStorage (données temporaires). Pour le thème sombre/clair ou un token d'authentification, préférez localStorage.

🔍 Inspecter et déboguer le stockage

Tous les navigateurs offrent un outil pour visualiser le contenu de localStorage et sessionStorage :

  • Dans Chrome/Edge : onglet "Application" → "Stockage local" / "Stockage de session".
  • Dans Firefox : onglet "Stockage" → "Stockage local" / "Stockage de session".
  • Vous pouvez aussi les lister en JavaScript : for(let i=0; i < localStorage.length; i++) { let key = localStorage.key(i); ... }

Cela vous permet de vérifier que vos données sont bien sauvegardées ou de les effacer manuellement pendant le développement.

⚡ Écouter les changements (événement storage)

L'événement storage est déclenché sur tous les autres onglets (ou fenêtres) de la même origine lorsqu'une modification est effectuée dans localStorage. C'est très utile pour synchroniser une application multi-onglets.

window.addEventListener('storage', (event) => {
  console.log(`La clé "${event.key}" a changé`);
  console.log(`Ancienne valeur : ${event.oldValue}`);
  console.log(`Nouvelle valeur : ${event.newValue}`);
  console.log(`Zone concernée : ${event.storageArea}`); // localStorage ou sessionStorage
});

Note : Cet événement ne se déclenche pas dans l'onglet qui a fait la modification, seulement dans les autres onglets de la même origine.

⚠️ Limites et bonnes pratiques

  • Ne stockez jamais d'informations sensibles (mot de passe, token d'accès critique) car n'importe quel script sur la page peut y accéder.
  • Le stockage est synchrone : les opérations lourdes (grosses données) peuvent bloquer l'interface. Préférez des données légères.
  • Respectez la capacité maximale (environ 5 Mo). Au-delà, le navigateur lèvera une exception QuotaExceededError.
  • Pensez à gérer les erreurs (ex : espace disque plein, mode privé). Utilisez try...catch autour de setItem().

🔄 Exemple complet : formulaire sauvegardé automatiquement

Voici un mini-exemple qui sauvegarde les champs d'un formulaire dans localStorage à chaque saisie, et les restaure au chargement.

// Sauvegarde automatique
const form = document.querySelector('#monFormulaire');
const sauvegarder = () => {
  const data = {
    nom: form.nom.value,
    email: form.email.value,
    message: form.message.value
  };
  localStorage.setItem('formData', JSON.stringify(data));
};

form.addEventListener('input', sauvegarder);

// Restauration au chargement
window.addEventListener('DOMContentLoaded', () => {
  const saved = localStorage.getItem('formData');
  if (saved) {
    const data = JSON.parse(saved);
    form.nom.value = data.nom || '';
    form.email.value = data.email || '';
    form.message.value = data.message || '';
  }
});

Ce mécanisme évite de perdre les données saisies en cas de rafraîchissement accidentel de la page.

Sources

Mots clés

JavaScript

💡 Besoin d'une application web avec persistance des données ?

Vous souhaitez intégrer du stockage local performant dans votre projet ? Que ce soit pour un panier d'achat, des préférences utilisateur ou une application offline-first, je vous accompagne dans le développement JavaScript.

Contactez-moi pour un accompagnement personnalisé
Un homme assi à son bureau au milieu des post-it La gestion d'état : le système nerveux de vos applications

Comprendre la gestion d'état : rôle, défis et principes (source unique de vérité, immuabilité, architecture). Exemples concrets et Redux expliqué simplement.

Un développeur travaille sur un formulaire web. Récupérer les données d'un formulaire avec JavaScript

Fini les getElementById répétitifs ! Découvrez comment récupérer facilement les données d'un formulaire en JavaScript avec FormData.

Dessin d'un explorateur de fichiers avec une structure de dossiers bien organisée d'un côté et mal organisé de l'autre Nommer ses dossiers et fichiers : évitez les pièges courants

Découvrez les erreurs à éviter lors du nommage de vos dossiers et fichiers dans un projet web : espaces, accents, caractères spéciaux, noms génériques...