Зачем сайту хранить что-то у вас
Протокол HTTP сам по себе не помнит, кто вы: каждый запрос независим. Чтобы сайт «узнавал» вход в аккаунт, корзину покупок или выбранный язык, часть информации хранится на стороне браузера. Для этого существует несколько механизмов, и самые известные из них — cookie и локальное хранилище (localStorage).
Внешне они похожи, поскольку и то и другое записывает пары «имя — значение», но работают по-разному и решают разные задачи.
Практическое различие для пользователя невелико, но для безопасности оно ощутимо. Сессионные cookie с защитными атрибутами труднее украсть скриптом, тогда как содержимое локального хранилища доступно любой части страницы. Поэтому вход в аккаунт обычно опирается на cookie, а интерфейсные мелочи — на локальное хранилище.
Cookie
Cookie — небольшие фрагменты данных, которые сервер просит браузер сохранить. Их главная особенность: браузер автоматически отправляет их обратно на сервер с каждым запросом к этому сайту. Поэтому cookie подходят для сессий, когда серверу нужно понимать, что запрос пришёл от вошедшего пользователя.
У них есть атрибуты, влияющие на безопасность: срок действия, ограничение на передачу только по защищённому соединению, запрет чтения из скриптов страницы, правила отправки при межсайтовых запросах. Размер каждого маленький, а лишние cookie утяжеляют каждый запрос.
Локальное хранилище
localStorage работает как ключ-значение на стороне браузера и доступно скриптам страницы. В отличие от cookie, данные автоматически не отправляются на сервер: страница сама читает их и решает, что с ними делать. Объём заметно больше, а срок хранения не ограничен, пока пользователь или сайт не удалят данные.
Такое хранилище удобно для настроек интерфейса, черновиков и кэша данных приложения. Есть и близкие механизмы: хранилище сеанса, живущее до закрытия вкладки, и более сложная база данных браузера для больших объёмов.
Ограничение: скрипты страницы могут читать localStorage, поэтому уязвимость, позволяющая выполнить чужой код на сайте, раскроет и эти данные. Хранить в нём секреты сессии рискованно.
Сравнение по критериям: Cookie или локальное хранилище
Передача на сервер: у cookie автоматическая, у localStorage нет. Объём: у cookie малый, у localStorage больше. Защита: cookie можно пометить как недоступные для скриптов, у localStorage такой возможности нет. Срок жизни: у cookie задаётся атрибутами, у localStorage он не ограничен по умолчанию.
Слежение: для отслеживания можно использовать оба механизма. Поэтому очистка только cookie не всегда убирает все идентификаторы, и браузеры предлагают удалять данные сайтов целиком.
Как посмотреть и очистить данные
В инструментах разработчика браузера есть вкладка приложения или хранилища, где видны cookie, localStorage, хранилище сеанса и базы данных для выбранного сайта. Там же можно удалить отдельные записи и понять, что именно сайт сохраняет у вас.
В пользовательских настройках доступен раздел данных сайтов: он показывает, какие ресурсы хранят информацию, и позволяет удалить всё сразу либо выборочно. Учтите, что очистка выведет вас из аккаунтов и сбросит настройки на этих сайтах.
Можно включить автоматическую очистку при закрытии браузера, добавив исключения для тех сайтов, где нужно сохранить вход. Такой подход уменьшает следы и не превращает работу в постоянный повторный ввод паролей.
Что это значит для пользователя
Чтобы действительно очистить следы сайта, недостаточно удалить cookie: в настройках браузера есть общий раздел данных сайтов, где хранятся и другие механизмы. Режим приватного окна и запрет сторонних данных ограничивают часть слежения, но не заменяют регулярной очистки.
Для владельца сайта правило простое: секреты сессии кладут в cookie с защитными атрибутами, а пользовательские настройки и кэш допустимо держать в локальном хранилище.
Для разработчиков напоминание: любые данные в браузере пользователь видит и может изменить, поэтому на клиентской стороне нельзя полагаться на них при проверке прав доступа.