Stocke des données dans le navigateur en utilisant localStorage et sessionStorage pour des données persistantes côté client.
L'API Web Storage fournit deux mécanismes pour stocker des paires clé-valeur dans le navigateur : localStorage et sessionStorage.
localStorage :
sessionStorage :
Caractéristiques communes :
// localStorage persiste
localStorage.setItem('theme', 'dark');
// Ferme le navigateur, rouvre-le — la valeur est toujours là !
// sessionStorage est temporaire
sessionStorage.setItem('tempData', 'disparaît à la fermeture de l'onglet');localStorage et sessionStorage partagent la même API.
Définir des valeurs :
localStorage.setItem('username', 'Alice');
localStorage.setItem('score', '100');Récupérer des valeurs :
const name = localStorage.getItem('username'); // 'Alice'
const missing = localStorage.getItem('nonexistent'); // nullSupprimer des valeurs :
localStorage.removeItem('username');Tout effacer :
localStorage.clear(); // supprime TOUS les élémentsAutres propriétés :
// Nombre d'éléments stockés
console.log(localStorage.length);
// Obtenir une clé par index
console.log(localStorage.key(0)); // nom de la première cléImportant : Toutes les valeurs sont stockées sous forme de chaînes de caractères. Si tu stockes un nombre, il revient sous forme de chaîne :
localStorage.setItem('count', 42);
const count = localStorage.getItem('count');
console.log(typeof count); // 'string'
console.log(count); // '42' (pas 42)Puisque Storage n'accepte que des chaînes de caractères, tu dois sérialiser les objets et tableaux avec JSON.stringify() avant de les stocker, et les parser avec JSON.parse() lors de la récupération.
// Stocker un objet
const user = { name: 'Alice', age: 30, scores: [95, 87, 92] };
localStorage.setItem('user', JSON.stringify(user));
// Récupérer et parser
const stored = localStorage.getItem('user');
const parsed = JSON.parse(stored);
console.log(parsed.name); // 'Alice'
console.log(parsed.scores); // [95, 87, 92]Gère toujours null — getItem retourne null si la clé n'existe pas, et JSON.parse(null) retourne null (ne lance pas d'erreur) :
const data = localStorage.getItem('maybeExists');
const result = data ? JSON.parse(data) : defaultValue;Fonctions utilitaires pratiques :
function saveJSON(key, value) {
localStorage.setItem(key, JSON.stringify(value));
}
function loadJSON(key, fallback = null) {
const data = localStorage.getItem(key);
return data ? JSON.parse(data) : fallback;
}
// Utilisation
saveJSON('settings', { theme: 'dark', lang: 'en' });
const settings = loadJSON('settings', { theme: 'light' });Bons cas d'usage pour Web Storage :
Limitations :
Alternatives pour des besoins plus avancés :
Note de sécurité : Ne stocke jamais de données sensibles (mots de passe, tokens, informations personnelles) dans localStorage. Il est accessible à tout JavaScript sur la page et vulnérable aux attaques XSS.
<div id="output"></div>
<script>
// Store simple values
localStorage.setItem('appName', 'Kodojo');
localStorage.setItem('version', '1.0');
// Store complex data with JSON
const preferences = {
theme: 'dark',
fontSize: 16,
notifications: true
};
localStorage.setItem('prefs', JSON.stringify(preferences));
// Retrieve and parse
const appName = localStorage.getItem('appName');
const prefs = JSON.parse(localStorage.getItem('prefs'));
// Handle missing data with fallback
const language = localStorage.getItem('lang') || 'en';
const output = document.getElementById('output');
output.innerHTML = `
<p>App: ${appName} v${localStorage.getItem('version')}</p>
<p>Theme: ${prefs.theme}</p>
<p>Font size: ${prefs.fontSize}px</p>
<p>Language: ${language} (default)</p>
<p>Items stored: ${localStorage.length}</p>
`;
// Clean up demo data
localStorage.removeItem('appName');
localStorage.removeItem('version');
localStorage.removeItem('prefs');
</script>Que se passe-t-il lorsque tu stockes un objet directement dans localStorage ?