Web Storage and Local Storage
Persisting data in the browser
Challenge
Section titled “Challenge”Store user preferences, cache data locally, and manage session state without making repeated server requests.
Explanation
Section titled “Explanation”Web Storage provides APIs to store data on the client-side. There are two types: localStorage (persistent) and sessionStorage (temporary).
LocalStorage
Section titled “LocalStorage”// StorelocalStorage.setItem('theme', 'dark');
// Retrieveconst theme = localStorage.getItem('theme');
// RemovelocalStorage.removeItem('theme');
// Clear alllocalStorage.clear();
// Check if existsif (localStorage.getItem('userId')) { console.log('User already logged in');}
// Storage eventwindow.addEventListener('storage', (event) => { if (event.key === 'theme') { console.log('Theme changed:', event.newValue); }});Complex Objects
Section titled “Complex Objects”// Store objectsconst user = { id: 1, name: 'John', preferences: { theme: 'dark' } };localStorage.setItem('user', JSON.stringify(user));
// Retrieve objectsconst storedUser = JSON.parse(localStorage.getItem('user'));console.log(storedUser.preferences.theme); // 'dark'SessionStorage
Section titled “SessionStorage”// Same API as localStorage, but data cleared on tab closesessionStorage.setItem('tempData', 'value');const tempData = sessionStorage.getItem('tempData');Practical Example
Section titled “Practical Example”class UserPreferences { constructor() { this.storageKey = 'appPreferences'; }
get() { const data = localStorage.getItem(this.storageKey); return data ? JSON.parse(data) : {}; }
set(key, value) { const prefs = this.get(); prefs[key] = value; localStorage.setItem(this.storageKey, JSON.stringify(prefs)); }
clear() { localStorage.removeItem(this.storageKey); }}
// Usageconst prefs = new UserPreferences();prefs.set('theme', 'dark');prefs.set('language', 'en');console.log(prefs.get()); // { theme: 'dark', language: 'en' }Limitations and Best Practices
Section titled “Limitations and Best Practices”// Storage quota (typically 5-10MB)try { localStorage.setItem('largeData', largeString);} catch (e) { if (e.name === 'QuotaExceededError') { console.error('Storage quota exceeded'); }}
// Private browsing clears storagetry { const test = '__test__'; localStorage.setItem(test, test); localStorage.removeItem(test);} catch (e) { console.log('Private browsing mode detected');}
// Don't store sensitive data// ❌ Bad: localStorage.setItem('password', password);// ✅ Good: Use sessionStorage for temporary auth tokens