DEV Community

Cover image for Browser Storage Explained: LocalStorage vs SessionStorage vs IndexedDB vs Cookies
Arnav Sharma
Arnav Sharma

Posted on

Browser Storage Explained: LocalStorage vs SessionStorage vs IndexedDB vs Cookies

When building modern web applications, storing data in the browser is essential for improving user experience, reducing server load, and enabling offline capabilities. But with multiple storage options available—LocalStorage, SessionStorage, IndexedDB, and Cookies—it’s easy to get confused about which one to use and when.

Let’s break them down with a clear comparison.


🌐 1. LocalStorage

What it is

LocalStorage is a simple key–value storage mechanism provided by the browser. Data is stored persistently, meaning it remains even after the browser is closed and reopened.

Key features

  • Capacity: ~5–10 MB (depends on browser).

  • Data persists until explicitly cleared (by code or user).

  • Synchronous API (may block the main thread if used heavily).

  • Stores string data only (objects must be stringified).

Use cases

  • Saving user preferences (theme, layout).

  • Caching small API responses.

  • Storing lightweight app state (e.g., last visited tab).

✅ Best for: Simple, persistent key-value storage.


🕒 2. SessionStorage

What it is

SessionStorage works similarly to LocalStorage but is tied to the browser session. Data is cleared when the tab is closed.

Key features

  • Capacity: ~5 MB.

  • Data is isolated per tab/window (even the same site in a new tab won’t share it).

  • Synchronous API.

  • Stores string data only.

Use cases

  • Temporary form data.

  • Preventing multiple submissions.

  • Data needed only while the page is open.

✅ Best for: Short-lived data specific to a single tab.


📦 3. IndexedDB

What it is

IndexedDB is a low-level, NoSQL database built into browsers. It allows storing large amounts of structured data, including files/blobs.

Key features

  • Capacity: Hundreds of MBs to GBs (depends on browser & user storage limits).

  • Data persists until cleared.

  • Asynchronous API (non-blocking).

  • Can store objects, arrays, blobs, and more.

  • Supports transactions, indexes, and queries.

Use cases

  • Offline-first applications (e.g., note-taking apps, todo apps).

  • Large datasets (caching JSON, images, or videos).

  • Complex querying and searching inside the browser.

✅ Best for: Storing large or structured data.


🍪 4. Cookies

What they are

Cookies are the oldest form of browser storage, designed primarily for server–client communication. They can store small pieces of data and are sent with every HTTP request to the server.

Key features

  • Capacity: ~4 KB per cookie.

  • Can be set to expire or persist.

  • Sent to the server with each request (can affect performance).

  • Accessible by both client-side JavaScript and the server (if not marked HttpOnly).

  • Can be secured with flags like Secure, HttpOnly, SameSite.

Use cases

  • Authentication tokens (though JWT/localStorage is now more common).

  • Remembering logged-in sessions.

  • Tracking (though privacy regulations limit this now).

✅ Best for: Server–client communication and small, secure data.


⚖️ Comparison Table

Feature Local Storage Session Storage IndexedDB Cookies
Storage limit ~5–10 MB ~5 MB Hundreds MBs–GBs ~4 KB per cookie
Persistence Until cleared Until tab closes Until cleared Configurable expiry
Data type Strings only Strings only Structured (objects, blobs) Strings only
Accessibility JS only JS only JS only JS + Server
Sent to server ❌ No ❌ No ❌ No ✅ Yes
Best for Preferences, cache Tab-specific data Large/complex offline data Auth, sessions


🚀 Final Thoughts

Browser storage is not “one size fits all.” Each option is designed for different use cases: LocalStorage and SessionStorage are great for small, simple data; IndexedDB is the powerhouse for complex offline apps; and Cookies are still essential for server communication.

👉 The right choice depends on your app’s data size, persistence needs, and whether the server requires access.

Top comments (0)