Both are Web Storage APIs that store key-value pairs in the browser. The difference is persistence:
| Feature | localStorage | sessionStorage |
|---|---|---|
| Persistence | Permanent (until cleared) | Tab lifetime only |
| Scope | All tabs/windows (same origin) | Single tab only |
| Survives browser close | Yes | No |
| Shared between tabs | Yes | No (each tab has own storage) |
| Size limit | ~5MB | ~5MB |
Permanent storage - survives browser restart
Tab-only storage - cleared when tab closes
// localStorage - permanent storage
localStorage.setItem('key', 'value'); // Set
const value = localStorage.getItem('key'); // Get (returns null if missing)
localStorage.removeItem('key'); // Remove one
localStorage.clear(); // Remove all
// sessionStorage - same API, different persistence
sessionStorage.setItem('key', 'value');
sessionStorage.getItem('key');
sessionStorage.removeItem('key');
sessionStorage.clear();
// Storing objects (must serialize to JSON)
const user = { name: 'Alice', role: 'admin' };
localStorage.setItem('user', JSON.stringify(user));
const saved = JSON.parse(localStorage.getItem('user'));
You can listen for storage changes from other tabs:
window.addEventListener('storage', (event) => {
console.log('Storage changed!');
console.log('Key:', event.key);
console.log('Old value:', event.oldValue);
console.log('New value:', event.newValue);
console.log('URL:', event.url);
});
// Note: This only fires for changes from OTHER tabs/windows