Skip to content
web technology questions

Web Technology · 5 of 10junior~1 min

What is the difference between localStorage, sessionStorage, and cookies?

#browser#storage#security

Browser Storage

localStorage

  • Persists until explicitly cleared.
  • Accessible only via JavaScript.
  • ~5-10MB per origin.
  • Not sent to server automatically.
ts
localStorage.setItem('theme', 'dark'); localStorage.getItem('theme'); // 'dark' localStorage.removeItem('theme'); localStorage.clear();

sessionStorage

  • Cleared when the browser tab is closed.
  • Not shared across tabs.
  • Same API as localStorage.
ts
sessionStorage.setItem('draftForm', JSON.stringify(formData)); // survives page refresh in same tab, gone when tab closes

Cookies

  • Sent to the server on every request automatically.
  • Can be set by server (Set-Cookie header) or client.
  • Configurable expiry, scope, and security flags.
  • ~4KB limit.
ts
// client-side document.cookie = 'name=Alice; max-age=3600; path=/'; // server sets httpOnly cookie (JS can't read) res.setHeader('Set-Cookie', 'token=abc123; HttpOnly; Secure; SameSite=Strict; Max-Age=86400');

Security flags for cookies

FlagEffect
HttpOnlyNot accessible via JS - prevents XSS token theft
SecureOnly sent over HTTPS
SameSite=StrictNever sent on cross-site requests - prevents CSRF
SameSite=LaxSent on top-level navigations only

Comparison

localStoragesessionStorageCookie
Capacity~5-10MB~5MB~4KB
ExpiryNeverTab closeConfigurable
Sent to serverNoNoYes (auto)
Accessible via JSYesYesYes (if not httpOnly)
Cross-tabYesNoYes

Never store JWTs or sensitive tokens in localStorage - it's vulnerable to XSS. Use httpOnly cookies instead - JavaScript can't read them even if your site is compromised.

updated

did you know it?

related questions