Web Storage API
Remember your biryani order — store data in the browser. Close the page, close the browser — data persists.
Imagine you order at Paradise Biryani — "Hyderabadi dum biryani, extra raita, mirchi ka salan." The waiter writes it down. You leave. Ten days later you return — the waiter remembers your order. That's localStorage — the browser remembers your data. Refresh the page, close the tab, quit the browser — the data stays.
localStorage is a key-value store — string keys and string values. Simple API: setItem(), getItem(), removeItem(), clear(). You get 5-10MB per origin (domain + protocol + port). Store objects/arrays with JSON.stringify(), retrieve with JSON.parse(). No server involved — everything happens in the browser.
localStorage = permanent order book — persists even after browser closes. sessionStorage = one-sitting order — forgotten when tab closes. cookies = small chit — sent to server with every request. IndexedDB = warehouse — for storing large datasets.Different storage options for different needs:
- localStorage — Permanent storage. 5-10MB limit. Survives tab close, browser close, restart. Key-value string pairs. Objects need JSON.stringify().
- sessionStorage — Tab-scoped storage. Tab close = data gone. Same API as localStorage (setItem, getItem, removeItem, clear). Separate per tab.
- Cookies — Tiny storage (4KB per cookie, ~20 per domain). Sent with every HTTP request. Can have expiry. Used for sessions, auth, tracking.
- IndexedDB — Full database in browser. NoSQL — object stores, indexes. Hundreds of MB. Async API. Complex queries. Offline apps, large datasets.
- Cache API — Stores HTTP request/response pairs. Works with service workers. Essential for PWA offline support.
// localStorage — permanent storage
localStorage.setItem("name", "Biryani"); // Store a string
const name = localStorage.getItem("name"); // Get: "Biryani"
localStorage.removeItem("name"); // Delete one key
localStorage.clear(); // Delete ALL keys
// Store an object
const order = { item: "Hyderabadi Biryani", qty: 2 };
localStorage.setItem("order", JSON.stringify(order));
// Retrieve object
const saved = JSON.parse(localStorage.getItem("order"));
console.log(saved.item); // "Hyderabadi Biryani"
// Check length
console.log(localStorage.length); // Number of stored items
// Iterate
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
console.log(key, localStorage.getItem(key));
}
// sessionStorage — tab-scoped (same API)
sessionStorage.setItem("temp", "This will be gone on tab close");
localStorage.setItem("k", "v")Store key-value pair (both strings)localStorage.getItem("k")Get value by key — string or nulllocalStorage.removeItem("k")Delete one key-value pairlocalStorage.clear()Delete ALL data for this originlocalStorage.lengthTotal stored items countlocalStorage.key(i)Key name by indexJSON.stringify(obj)Object/array to string for storageJSON.parse(str)String back to object/arraysessionStorage.setItem()Same API, tab-scoped onlydocument.cookieAccess cookies — semicolon-separated stringKnow when to use which storage mechanism:
Persistent data — settings, preferences, order history
Learn →
📄 sessionStorage vs localStorage
Tab-specific data — form drafts, temporary state
Learn →
🍪 Cookies
Auth tokens, sessions, tracking — sent with every request
Learn →
🗃️ IndexedDB
Large datasets, offline apps, complex queries
Learn →
📦 Cache API
HTTP responses for offline — PWA support
Learn →
localStorage.setItem("key", "value") — both MUST be stringslocalStorage.getItem("key") — returns string or nulllocalStorage.removeItem("key") or clear() alllocalStorage.length + localStorage.key(i) to list alllocalStorage stores ONLY strings! Numbers become strings. setItem("count", 42) returns "42" (string!). Always use parseInt() or JSON.parse(). Always null-check before parsing.
Build a biryani order tracker using localStorage. Add orders, display them, delete them — full CRUD with localStorage.
Open VS Code. Create biryani-tracker.html.
Use the starter code below and complete the tracker:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Biryani Order Tracker</title>
</head>
<body>
<h1>🍛 Biryani Order Tracker</h1>
<form id="orderForm">
<input type="text" id="item" placeholder="Item name" required>
<input type="number" id="qty" placeholder="Quantity" required>
<textarea id="notes" placeholder="Special notes"></textarea>
<button type="submit">Add Order</button>
</form>
<div id="orders"></div>
<button onclick="clearAll()">🗑️ Clear All</button>
<script>
// TODO: Implement CRUD with localStorage
</script>
</body>
</html>
Build these features:
Done — Key Points:
- ✅
localStorage= permanent,sessionStorage= gone on tab close - ✅ Same API — setItem, getItem, removeItem, clear, key, length
- ✅ Only strings — JSON.stringify() objects, JSON.parse() to retrieve
- ✅ 5-10MB limit per origin — quota exceeded possible
- ✅ Cookies = 4KB, sent with every server request
- ✅ IndexedDB = large data, async, NoSQL database
- ✅ Cache API = HTTP responses, works with service workers
- ✅ Always try-catch — fails in private browsing
- ✅ NEVER store sensitive data in localStorage
Want to track your progress?
Log in to save your place and pick up where you left off.
Progress track karna chahte ho?
Login karo apni progress save karne ke liye aur jahan chhoda tha wahan se shuru karo.
Login