Что такое HTTP cookie и как они работают?

Ответ

HTTP cookie (куки) — это небольшой фрагмент данных, отправляемый веб-сервером и хранимый на стороне клиента (в браузере). Браузер автоматически отправляет эти данные обратно серверу с каждым последующим запросом к тому же домену, обеспечивая сохранение состояния (stateful) поверх stateless-протокола HTTP.

Механизм работы:

  1. Сервер включает в HTTP-ответ заголовок Set-Cookie.
  2. Браузер сохраняет эту пару «ключ-значение» локально.
  3. При следующих запросах к тому же домену браузер автоматически добавляет заголовок Cookie с сохраненными данными.

Основные типы:

  • Сессионные (Session cookies): Существуют только во время сессии браузера, удаляются после его закрытия. Не имеют срока истечения (Expires или Max-Age).
  • Постоянные (Persistent cookies): Имеют установленный срок жизни (Expires или Max-Age) и хранятся на диске до истечения этого срока.

Пример работы с куками в Selenium WebDriver (Python):

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# Добавить новую куку
driver.add_cookie({
    "name": "session_token",
    "value": "abc123xyz",
    "domain": "example.com"
})

# Получить все куки для текущего домена
all_cookies = driver.get_cookies()
print(all_cookies)

# Получить значение конкретной куки
value = driver.get_cookie("session_token")["value"]

# Удалить куку
driver.delete_cookie("session_token")

# Удалить все куки
driver.delete_all_cookies()

Назначение: аутентификация сессий, хранение пользовательских предпочтений, отслеживание поведения (аналитика).

Ответ 18+ 🔞

А, ну вот, смотри, куки, блядь! Это ж такая простая хуйня, а столько народу её не понимает, в рот меня чих-пых!

Представь себе, ты заходишь в паб. Бармен тебя впервые видит, нихуя о тебе не знает. Ты ему: «Пива!». Он тебе наливает. На следующий день ты опять приходишь, он опять нихуя не помнит. «Пива!» — и снова наливает. Статичный протокол, блядь, HTTP такой же — каждый запрос для сервера как новый клиент, ёпта.

А теперь сценарий с куками. Ты заходишь в паб, бармен даёт тебе жетончик, на котором написано «Вася, любит тёмное, должен 500 рублей». Это и есть Set-Cookie, понимаешь? Ты этот жетон (куку) кладёшь в карман (браузер сохраняет). Приходишь через неделю, достаёшь жетон, кладёшь на стойку (Cookie в заголовке запроса). Бармен смотрит: «А, Вася! Тёмное уже наливаю, и не забудь долг отдать!». Состояние сохранилось! Вот и вся магия, блядь.

Какие они бывают, эти сучки-печеньки:

  • Сессионные (Session cookies): Это как жетон, который ты сдаёшь при выходе из паба. Закрыл браузер — всё, хуй упал, кука испарилась. Сроков жизни нет, живут, пока вкладка открыта.
  • Постоянные (Persistent cookies): А это уже жетон с датой. «Действителен до 31.12.2024». Браузер его на диск пишет, и хоть ты комп выключи, через месяц откроешь — жетон в кармане, бармен тебя узнает. У них есть Expires или Max-Age.

Зачем это всё, спросишь? Да чтобы тебя помнить, мудак! Чтоб не логиниться каждый раз, чтоб корзину в интернет-магазине не терять, и, конечно же, чтоб следить, какую хуйню ты там в интернете смотришь (это аналитика, блядь).

А вот как с этим колдовать в Selenium, если ты, допустим, тестировщик-извращенец:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://example.com")

# Подсунуть браузеру свою куку (типа бармену фальшивый жетон)
driver.add_cookie({
    "name": "session_token", # Ключ
    "value": "abc123xyz",    # Значение (типа "Вася, должник")
    "domain": "example.com"  # Какому пабу (домену) этот жетон принадлежит
})

# Посмотреть, какие жетоны уже валяются в кармане (браузере)
all_cookies = driver.get_cookies()
print(all_cookies) # Выведет всю эту похабень

# Достать и прочитать один конкретный жетон
value = driver.get_cookie("session_token")["value"]

# Выкинуть один жетон нахуй
driver.delete_cookie("session_token")

# Устроить тотальную зачистку карманов — вытрясти все жетоны
driver.delete_all_cookies()

Вот и весь сказ, блядь. Не печенька, а инструмент, ёпта!