Урок 5. Cookie, сессия и перенаправления
HTTP сам по себе не помнит предыдущий запрос. Однако после входа сайт узнаёт пользователя на следующих страницах. Посмотрим, как браузерная cookie связывается с сессией на сервере и как перенаправление продолжает вход.
Войдите обычным способом
Откройте работающий «Кружок», перейдите на /login и войдите:
логин: student
пароль: student
После отправки формы браузер перейдёт в настройки. DevTools пока не нужен: изучите подготовленную последовательность.
POST /login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
username=student&password=student
HTTP/1.1 302 Found
Location: /settings
Set-Cookie: kruzhok_session=<случайный идентификатор>
Ответ 302 не содержит страницу настроек. Location предлагает браузеру сделать следующий запрос, а Set-Cookie просит сохранить случайный идентификатор.
Вход состоит из ответа 302 с Location и отдельного GET, который уже отправляет cookie.
GET /settings HTTP/1.1
Cookie: kruzhok_session=<тот же идентификатор>
HTTP/1.1 200 OK
Content-Type: text/html
Cookie и сессия — не одно и то же
Cookie хранится в браузере. В «Кружке» она содержит идентификатор, а состояние сессии хранится на сервере. Через сессию сервер находит профиль пользователя.
Cookie содержит идентификатор, серверная сессия связывает его с профилем пользователя.
Cookie не обязана быть паролем и не обязана содержать весь профиль. Даже правильная по форме строка перестаёт подтверждать вход, когда соответствующая сессия завершена.
Cookie ссылается на сессию
Уровень: базовое закрепление.
Войдите в «Кружок» в обычном окне и откройте настройки. Затем откройте те же настройки в приватном окне без входа.
Заполните три отдельные поля под заданием. Случайное значение cookie после = вводить не нужно.
Почему новая вкладка остаётся авторизованной
Откройте /settings в новой вкладке того же обычного окна. Вкладки используют общее хранилище cookie для этого сайта, поэтому новый запрос отправит kruzhok_session и сервер узнает ту же сессию.
Приватное окно имеет отдельное хранилище. Если в нём открыть /settings без входа, запрос не содержит cookie действующей сессии и сайт перенаправит на /login.
Что делает выход (logout)
Вернитесь в обычное окно и нажмите «Выйти»:
POST /logout HTTP/1.1
Cookie: kruzhok_session=<идентификатор>
HTTP/1.1 303 See Other
Location: /
Set-Cookie: kruzhok_session=; Max-Age=0
Сервер завершает сессию, а ответ просит браузер удалить cookie. После этого /settings снова ведёт на страницу входа.
Восстановить новую session-sequence
Уровень: базовое закрепление.
Ниже перемешаны фрагменты другого учебного портала. Восстановите последовательность успешного входа и последующего завершения сессии.
A. GET /account с Cookie: portal_sid=s7 → 200 OK
B. POST /signin → 303 See Other; Set-Cookie: portal_sid=s7; Location: /account
C. GET /account без Cookie → 302 Found; Location: /signin
D. POST /signout с Cookie: portal_sid=s7 → 303 See Other; Set-Cookie: portal_sid=; Max-Age=0; Location: /
E. GET /signin → 200 OK
В отдельных полях под заданием укажите:
- какой ответ установил cookie;
- какой запрос впервые отправил её обратно;
- в каких ответах находится redirect;
- что произошло после завершения сессии.
Порядок введите как пять букв через запятую; остальные ответы выберите из предложенных вариантов.
Где это пригодится на олимпиаде
В задаче «КиберМаглев» для 11 класса на региональном этапе ВсОШ 2025 года участник сохранял cookie maglev_session и обращался к API в авторизованном состоянии (источник: официальный разбор задачи, стр. 1–2). В задаче «Зельеварение» для 9 класса на региональном этапе 2026 года участник восстанавливал сессию и открывал /admin (источник: официальный разбор задачи, стр. 1–2). Отдельного подтверждённого примера именно на цепочку перенаправления в доступных разборах нет; здесь она нужна для базовой модели состояния.
Вывод
Отдельные HTTP-запросы не образуют память сами по себе. Cookie хранится в браузере и связывает запрос с серверной сессией, а профиль остаётся данными приложения. Set-Cookie, следующий Cookie и Location позволяют восстановить вход и перенаправление; при выходе сервер завершает сессию и просит браузер удалить cookie.
Следующий урок превращает знакомую теорию в измерение: в DevTools вы самостоятельно найдёте метод, путь, заголовки, тело, цепочку перенаправлений и cookie.