В двух словах
Все три хранят данные на клиенте, но отличаются сроком жизни, отправкой на сервер и объёмом.
Сравнение
| cookie | localStorage | sessionStorage |
|---|
| Уходит на сервер | да (если не ограничить) | нет | нет |
| Срок | expires/max-age | пока не очистят | вкладка/сессия |
| Размер | ~4 KB | ~5+ MB | ~5+ MB |
| Доступ из JS | да (кроме HttpOnly) | да | да |
document.cookie = "theme=dark; Path=/; SameSite=Lax";
localStorage.setItem("theme", "dark");
sessionStorage.setItem("wizardStep", "2");
Итог
Сессия/auth — часто cookie с флагами; настройки UI — localStorage; временное по вкладке — sessionStorage.