Cookies и сессии
Понимаем, как поверх «беспамятного» HTTP реализуют вход в систему и сохранение состояния.
Cookie — небольшой именованный кусочек данных, который сервер просит браузер сохранить и присылать обратно с каждым запросом к этому сайту.
Проблема: HTTP не помнит
Мы выяснили, что HTTP stateless — каждый запрос независим. Но интернет-магазину нужно помнить, что вы вошли в аккаунт и что у вас в корзине. Как «пришить» состояние к независимым запросам? Через cookies.
Как работают cookies
Механизм простой и держится на двух заголовках:
- Сервер в ответе просит сохранить cookie заголовком
Set-Cookie. - Браузер хранит её и автоматически добавляет в каждый следующий запрос заголовком
Cookie.
Ответ сервера (вы вошли):
HTTP/1.1 200 OK
Set-Cookie: session=abc123xyz; HttpOnly; Secure; SameSite=Lax
Следующий запрос браузера (автоматически):
GET /profile HTTP/1.1
Cookie: session=abc123xyz
По session=abc123xyz сервер узнаёт вас среди тысяч запросов.
Сессии: что хранить — данные или ключ?
Есть два подхода, что класть в cookie:
| Подход | В cookie | Состояние |
| Серверная сессия | только id (ключ) | на сервере (память/БД) |
| Токен (JWT и т.п.) | сами данные (подписанные) | в самом токене, сервер не хранит |
При серверной сессии в cookie лежит только случайный идентификатор, а все данные («это пользователь №42, админ») — на сервере. При токенном подходе данные зашиты в сам токен и подписаны, поэтому сервер может ничего не хранить — удобно для масштабирования.
Важные флаги cookie
Флаги управляют безопасностью cookie — их обязательно знать:
| Флаг | Что делает |
HttpOnly | cookie недоступна из JavaScript — защита от кражи через XSS |
Secure | cookie отправляется только по HTTPS |
SameSite | ограничивает отправку cookie с других сайтов — защита от CSRF |
Expires/Max-Age | срок жизни; без них — до закрытия браузера |
Сессионную cookie почти всегда ставят с HttpOnly и Secure: так её не украдёт чужой скрипт и не перехватит злоумышленник в открытой сети.
Зачем это веб-разработчику
Cookies и сессии — это и есть «вход в аккаунт» на 90% сайтов. Понимание флагов напрямую про безопасность: забыли HttpOnly — открыли дверь для кражи сессии через XSS. Забыли SameSite — рискуете CSRF. А ещё cookies тесно связаны с CORS (следующий раздел): по умолчанию они не шлются на чужой origin.
Итог
- Cookie позволяет stateless-HTTP «помнить» пользователя между запросами.
- Сервер ставит cookie через
Set-Cookie, браузер возвращает черезCookie. - Серверная сессия хранит данные на сервере (в cookie только id); токен — данные в самом cookie.
- Флаги
HttpOnly,Secure,SameSite— это безопасность сессии.