> **Источник:** https://python-all.ru/3.0/library/http.cookies.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# `http.cookies` – управление состоянием HTTP

Модуль `http.cookies` определяет классы для абстракции понятия cookies, механизма управления состоянием HTTP. Он поддерживает как простые строковые cookies, так и предоставляет абстракцию для использования любого сериализуемого типа данных в качестве значения cookie.

Ранее модуль строго применял правила разбора, описанные в спецификациях [**RFC 2109**](https://python-all.ru/3.0/library/http.cookies.html) и [**RFC 2068**](https://python-all.ru/3.0/library/http.cookies.html). Однако впоследствии было обнаружено, что MSIE 3.0x не следует правилам набора символов, изложенным в этих спецификациях. В результате используемые правила разбора стали менее строгими.

> **Примечание**
>
> При обнаружении недопустимого cookie возникает [`CookieError`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.CookieError), поэтому, если данные cookie поступают из браузера, всегда следует готовиться к недопустимым данным и перехватывать [`CookieError`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.CookieError) при разборе.

#### `[http.cookies.CookieError]exception http.cookies.CookieError`

Исключение, возникающее из-за недействительности

[**RFC 2109**](https://python-all.ru/3.0/library/http.cookies.html)

: неверные атрибуты, неверный заголовок

*Set-Cookie*

и т.д.

#### `[http.cookies.BaseCookie]class http.cookies.BaseCookie([input])`

Этот класс представляет собой объект, подобный словарю, ключи которого – строки, а значения – экземпляры [`Morsel`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel). Обратите внимание, что при установке ключа в значение, это значение сначала преобразуется в [`Morsel`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel), содержащий ключ и значение.

Если указан параметр *input*, он передаётся методу [`load()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie.load).

#### `[http.cookies.SimpleCookie]class http.cookies.SimpleCookie([input])`

Этот класс наследует от

[`BaseCookie`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie)

и переопределяет

`value_decode()`

и

`value_encode()`

как тождественную функцию и

[`str()`](https://python-all.ru/3.0/library/functions.html#str)

соответственно.

> **См. также**
>
> **Модуль [`http.cookiejar`](https://python-all.ru/3.0/library/http.cookiejar.html#module-http.cookiejar)**
>
> Обработка HTTP cookies для веб-
>
> *клиентов*
>
> . Модули
>
> [`http.cookiejar`](https://python-all.ru/3.0/library/http.cookiejar.html#module-http.cookiejar)
>
> и
>
> `http.cookies`
>
> не зависят друг от друга.
>
> **[**RFC 2109**](https://python-all.ru/3.0/library/http.cookies.html) – Механизм управления состоянием HTTP**
>
> Это спецификация управления состоянием, реализованная этим модулем.

## Объекты Cookie

#### `[http.cookies.BaseCookie.value_decode]BaseCookie.value_decode(val)`

Возвращает декодированное значение из строкового представления. Возвращаемое значение может быть любого типа. Этот метод ничего не делает в

[`BaseCookie`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie)

– он существует для того, чтобы его можно было переопределить.

#### `[http.cookies.BaseCookie.value_encode]BaseCookie.value_encode(val)`

Возвращает закодированное значение. *val* может быть любого типа, но возвращаемое значение должно быть строкой. Этот метод ничего не делает в [`BaseCookie`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie) – он существует, чтобы его можно было переопределить

В общем случае предполагается, что [`value_encode()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie.value_encode) и [`value_decode()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie.value_decode) являются обратными функциями на области значений *value\_decode*.

#### `[http.cookies.BaseCookie.output]BaseCookie.output([attrs[, header[, sep]]])`

Возвращает строковое представление, пригодное для отправки в качестве HTTP-заголовков.

*attrs*

и

*header*

передаются методу

[`output()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie.output)

каждого объекта

[`Morsel`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel)

.

*sep*

используется для объединения заголовков; по умолчанию это комбинация

`'\r\n'`

(CRLF).

#### `[http.cookies.BaseCookie.js_output]BaseCookie.js_output([attrs])`

Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы были отправлены HTTP-заголовки.

Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.BaseCookie.output).

#### `[http.cookies.BaseCookie.load]BaseCookie.load(rawdata)`

Если *rawdata* является строкой, она разбирается как `HTTP_COOKIE`, а найденные значения добавляются как объекты [`Morsel`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel). Если это словарь, то эквивалентно следующему:

```python
for k, v in rawdata.items():
    cookie[k] = v
```

## Объекты Morsel

#### `[http.cookies.Morsel]class http.cookies.Morsel`

Абстрагирует пару ключ/значение с атрибутами [**RFC 2109**](https://python-all.ru/3.0/library/http.cookies.html).

Объекты Morsel похожи на словари, и их набор ключей постоянен: это допустимые атрибуты [**RFC 2109**](https://python-all.ru/3.0/library/http.cookies.html), которые

- `expires`
- `path`
- `comment`
- `domain`
- `max-age`
- `secure`
- `version`
- `httponly`

Атрибут `httponly` указывает, что cookie передаётся только в HTTP-запросах и недоступен через JavaScript. Это предназначено для смягчения некоторых форм межсайтового скриптинга.

Ключи нечувствительны к регистру.

#### `[http.cookies.Morsel.value]Morsel.value`

Значение cookie.

#### `[http.cookies.Morsel.coded_value]Morsel.coded_value`

Закодированное значение cookie – именно его следует отправлять.

#### `[http.cookies.Morsel.key]Morsel.key`

Имя cookie.

#### `[http.cookies.Morsel.set]Morsel.set(key, value, coded_value)`

Устанавливает члены

*key*

,

*value*

и

*coded\_value*

.

#### `[http.cookies.Morsel.isReservedKey]Morsel.isReservedKey(K)`

Определяет, является ли

*K*

одним из ключей объекта

[`Morsel`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel)

.

#### `[http.cookies.Morsel.output]Morsel.output([attrs[, header]])`

Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если не указан

*attrs*

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

*header*

по умолчанию равен

`"Set-Cookie:"`

.

#### `[http.cookies.Morsel.js_output]Morsel.js_output([attrs])`

Возвращает встраиваемый фрагмент JavaScript, который при выполнении в браузере, поддерживающем JavaScript, будет действовать так же, как если бы был отправлен HTTP-заголовок.

Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel.output).

#### `[http.cookies.Morsel.OutputString]Morsel.OutputString([attrs])`

Возвращает строку, представляющую Morsel, без какого-либо окружающего HTTP или JavaScript.

Значение *attrs* такое же, как в [`output()`](https://python-all.ru/3.0/library/http.cookies.html#http.cookies.Morsel.output).

## Пример

Следующий пример демонстрирует использование модуля `http.cookies`.

```python
>>> from http import cookies
>>> C = cookies.SimpleCookie()
>>> C["fig"] = "newton"
>>> C["sugar"] = "wafer"
>>> print(C) # сгенерировать HTTP-заголовки
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> print(C.output()) # то же самое
Set-Cookie: fig=newton
Set-Cookie: sugar=wafer
>>> C = cookies.SimpleCookie()
>>> C["rocky"] = "road"
>>> C["rocky"]["path"] = "/cookie"
>>> print(C.output(header="Cookie:"))
Cookie: rocky=road; Path=/cookie
>>> print(C.output(attrs=[], header="Cookie:"))
Cookie: rocky=road
>>> C = cookies.SimpleCookie()
>>> C.load("chips=ahoy; vienna=finger") # загрузить из строки (HTTP-заголовок)
>>> print(C)
Set-Cookie: chips=ahoy
Set-Cookie: vienna=finger
>>> C = cookies.SimpleCookie()
>>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=\\012;";')
>>> print(C)
Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=\012;"
>>> C = cookies.SimpleCookie()
>>> C["oreo"] = "doublestuff"
>>> C["oreo"]["path"] = "/"
>>> print(C)
Set-Cookie: oreo=doublestuff; Path=/
>>> C = cookies.SimpleCookie()
>>> C["twix"] = "none for you"
>>> C["twix"].value
'none for you'
>>> C = cookies.SimpleCookie()
>>> C["number"] = 7 # эквивалентно C["number"] = str(7)
>>> C["string"] = "seven"
>>> C["number"].value
'7'
>>> C["string"].value
'seven'
>>> print(C)
Set-Cookie: number=7
Set-Cookie: string=seven
```
