Куки (cookies) для начинающих: как браузер запоминает сайты — просмотр и установка через консоль JS
Primary tabs
Forums:
В уроке про HTTP мы упомянули важную особенность протокола: он не хранит состояние — для сервера каждый запрос «незнакомец». Куки (cookies) — механизм, который добавляет запросам память: именно на них держатся входы на сайты, корзины интернет-магазинов и счётчики посещений.
Что такое куки
Кука — маленькая запись вида имя=значение, которую браузер хранит для конкретного сайта.
Сервер в ответе просит браузер «запомни это», используя заголовок http-запроса Set-Cookie), и дальше браузер автоматически прикладывает сохранённые куки к каждому следующему запросу к этому сайту в заголовоке http-ответа с именем Cookie).
Так сервер и узнаёт «того же самого» посетителя (т.е. из-за того, что браузер, который поддерживает механизм куков добавляем ранее установленные и всё еще актуальные куки, к каждому последующему запросу на тот же сайт).
Смотрим куки
Самый наглядный способ — Инструменты разработчика: вкладка Application (в Firefox — Storage), раздел Cookies. Там видно имя, значение и срок жизни каждой куки текущего сайта.
А из консоли JS (F12 → Console) все куки сайта возвращаются одной командой:
document.cookie // "theme=dark; visits=3"
Это обычная строка: пары «имя=значение», разделённые точкой с запятой.
Ставим и удаляем куки через консоль
Попробуйте выполнить в консоли:
document.cookie = "visits=1"; // поставить или заменить document.cookie = "visits=2; max-age=3600"; // на час document.cookie = "visits=; max-age=0"; // удалить
А теперь проверка: поставьте куку, обновите страницу и снова выполните document.cookie — значение сохранилось. Вы только что руками сделали то, что обычно просит делать сервер: браузер запомнил данные и вернул их при следующем запросе.
Срок жизни
Кука без срока — «сессионная»: она живёт, пока открыт браузер, и исчезает при закрытии. Срок задаётся при установке: max-age=3600 (секунды) или expires с датой окончания.
Чьи это куки
Куки привязаны к домену: сайт example.com не видит куки сайта other.com. Но физически записи хранятся на компьютере посетителя — а значит, их можно посмотреть, изменить или удалить, что вы и делали в консоли.
Можно ли верить кукам
Значениям кук нельзя доверять вслепую: их мог изменить сам посетитель. Поэтому в куках не хранят секретных данных.
Для важных кук существует флаг HttpOnly — такую куку браузер по-прежнему прикладывает к запросам, но из JavaScript она не видна. Именно поэтому иногда в консоли видно меньше кук, чем реально уходит с запросами (посмотреть все можно на вкладке Network у конкретного запроса).
Контрольные вопросы
- Почему сервер, получив новый запрос по HTTP, не может сам понять, что этот посетитель уже приходил?
- Какими заголовками куки путешествуют между сервером и браузером — и в каких направлениях?
- Чем «сессионная» кука отличается от куки со сроком жизни, и что происходит с каждой при закрытии браузера?
- Какой командой в консоли JS можно увидеть все куки текущего сайта? В каком виде они возвращаются?
- Как удалить одну куку, не трогая остальные?
- Может ли сайт example.com прочитать куки сайта other.com? Почему?
- Почему значениям кук нельзя доверять без проверки, и что это значит для хранения в них данных?
- Из-за чего некоторые куки не видны через document.cookie, хотя реально отправляются с запросами?
- Log in to post comments
- 13 reads