В чем разница между куками, sessionStorage и localStorage
Что проверяют
Знаете ли вы, где живут данные клиента и как это влияет на тестирование: авторизацию, выход из аккаунта, работу в нескольких вкладках. Следом часто спрашивают, как вы посмотрите и поменяете эти данные в браузере и какие проверки безопасности сделаете для кук.
Как отвечать
Разведите три хранилища по четырём признакам: кто их видит, сколько живут, какой объём, уходят ли на сервер.
- куки: небольшие записи, около 4 КБ на одну куку. Браузер сам прикладывает их к каждому запросу на подходящий домен и путь. Срок задают
ExpiresилиMax-Age, без них кука сессионная и удаляется при закрытии браузера (если он не восстанавливает сессию). ФлагHttpOnlyпрячет куку отdocument.cookie,Secureотправляет её только по HTTPS,SameSiteограничивает отправку с чужих сайтов; - sessionStorage: обычно около 5 МБ на источник, привязан к конкретной вкладке. Переживает перезагрузку страницы, но новая вкладка, открытая вручную, получает пустое хранилище. На сервер сам не уходит;
- localStorage: похожий объём, живёт бессрочно, пока его не очистит код или пользователь, и общий для всех вкладок одного источника (схема, домен и порт).
Оба Web Storage хранят только строки и доступны любому скрипту на странице, поэтому токен в localStorage украдёт любая XSS, а куку с HttpOnly нет.
Для тестировщика главное показать, как вы это применяете. В Chrome DevTools всё видно на вкладке Application, там же их можно править. Типичные проверки: после выхода токены и куки действительно удалены; авторизация переживает перезагрузку; поведение в двух вкладках и в режиме инкогнито; реакция на просроченную куку; у сессионной куки выставлены HttpOnly, Secure и SameSite; в хранилище нет паролей и персональных данных открытым текстом.
Где спотыкаются
Говорят, что sessionStorage живёт «до закрытия браузера». Он привязан к вкладке: закрыли вкладку, данные пропали, а соседняя вкладка их и не видела.
Считают, что localStorage тоже уходит на сервер. Сервер узнаёт о нём, только если фронтенд сам положит значение в запрос.
Перечисляют отличия и не называют ни одной проверки. На позиции QA от вас ждут тест-кейсы, а не пересказ документации.