Урок 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 просит сохранить случайный идентификатор.

POST login получает 302 и Set-Cookie, затем GET settings получает страницу 200

Вход состоит из ответа 302 с Location и отдельного GET, который уже отправляет cookie.

GET /settings HTTP/1.1
Cookie: kruzhok_session=<тот же идентификатор>

HTTP/1.1 200 OK
Content-Type: text/html
Какой порядок правильно описывает успешный вход? · 5 б.

Cookie и сессия — не одно и то же

Cookie хранится в браузере. В «Кружке» она содержит идентификатор, а состояние сессии хранится на сервере. Через сессию сервер находит профиль пользователя.

Cookie браузера указывает на сессию сервера, а сессия на профиль пользователя

Cookie содержит идентификатор, серверная сессия связывает его с профилем пользователя.

Cookie не обязана быть паролем и не обязана содержать весь профиль. Даже правильная по форме строка перестаёт подтверждать вход, когда соответствующая сессия завершена.

Cookie ссылается на сессию

10 б.

Уровень: базовое закрепление.

Войдите в «Кружок» в обычном окне и откройте настройки. Затем откройте те же настройки в приватном окне без входа.

Заполните три отдельные поля под заданием. Случайное значение 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 снова ведёт на страницу входа.

Что произойдёт после logout при следующем открытии /settings? · 5 б.

Восстановить новую session-sequence

10 б.

Уровень: базовое закрепление.

Ниже перемешаны фрагменты другого учебного портала. Восстановите последовательность успешного входа и последующего завершения сессии.

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

В отдельных полях под заданием укажите:

  1. какой ответ установил cookie;
  2. какой запрос впервые отправил её обратно;
  3. в каких ответах находится redirect;
  4. что произошло после завершения сессии.

Порядок введите как пять букв через запятую; остальные ответы выберите из предложенных вариантов.

Где это пригодится на олимпиаде

В задаче «КиберМаглев» для 11 класса на региональном этапе ВсОШ 2025 года участник сохранял cookie maglev_session и обращался к API в авторизованном состоянии (источник: официальный разбор задачи, стр. 1–2). В задаче «Зельеварение» для 9 класса на региональном этапе 2026 года участник восстанавливал сессию и открывал /admin (источник: официальный разбор задачи, стр. 1–2). Отдельного подтверждённого примера именно на цепочку перенаправления в доступных разборах нет; здесь она нужна для базовой модели состояния.

Вывод

Отдельные HTTP-запросы не образуют память сами по себе. Cookie хранится в браузере и связывает запрос с серверной сессией, а профиль остаётся данными приложения. Set-Cookie, следующий Cookie и Location позволяют восстановить вход и перенаправление; при выходе сервер завершает сессию и просит браузер удалить cookie.

Следующий урок превращает знакомую теорию в измерение: в DevTools вы самостоятельно найдёте метод, путь, заголовки, тело, цепочку перенаправлений и cookie.