Документация Python неофициальный перевод
Содержание страницы

20.21. http.cookies – Управление состоянием HTTPhttp.cookies – HTTP state management

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

Ранее модуль строго применял правила разбора, описанные в спецификациях RFC 2109 и RFC 2068. Однако впоследствии было обнаружено, что MSIE 3.0x не следует правилам набора символов, изложенным в этих спецификациях. В результате используемые правила разбора стали менее строгими.

Примечание

При обнаружении недопустимого cookie возникает CookieError, поэтому, если данные cookie поступают из браузера, всегда следует готовиться к недопустимым данным и перехватывать CookieError при разборе.

exception http.cookies.CookieError
Исключение, возникающее из-за недействительности RFC 2109: неверные атрибуты, неверный заголовок Set-Cookie и т.д.
class http.cookies.BaseCookie([input])

Этот класс представляет собой объект, подобный словарю, ключи которого – строки, а значения – экземпляры Morsel. Обратите внимание, что при установке ключа в значение, это значение сначала преобразуется в Morsel, содержащий ключ и значение.

Если указан параметр input, он передаётся методу load().

class http.cookies.SimpleCookie([input])
Этот класс наследует от BaseCookie и переопределяет value_decode() и value_encode() как тождественную функцию и str() соответственно.

См. также

Модуль http.cookiejar
Обработка HTTP cookies для веб-клиентов. Модули http.cookiejar и http.cookies не зависят друг от друга.
RFC 2109 – Механизм управления состоянием HTTP
Это спецификация управления состоянием, реализованная этим модулем.

20.21.2. Объекты MorselMorsel Objects

class http.cookies.Morsel

Абстрагирует пару ключ/значение с атрибутами RFC 2109.

Объекты Morsel похожи на словари, и их набор ключей постоянен: это допустимые атрибуты RFC 2109, которые

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

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

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

Morsel.value
Значение cookie.
Morsel.coded_value
Закодированное значение cookie – именно его следует отправлять.
Morsel.key
Имя cookie.
Morsel.set(key, value, coded_value)
Устанавливает члены key, value и coded_value.
Morsel.isReservedKey(K)
Определяет, является ли K одним из ключей объекта Morsel.
Morsel.output(attrs=None, header='Set-Cookie:')
Возвращает строковое представление объекта Morsel, подходящее для отправки в качестве HTTP-заголовка. По умолчанию включаются все атрибуты, если не указан attrs; в этом случае он должен быть списком используемых атрибутов. header по умолчанию равен "Set-Cookie:".
Morsel.js_output(attrs=None)

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

Значение attrs такое же, как в output().

Morsel.OutputString(attrs=None)

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

Значение attrs такое же, как в output().

20.21.3. ПримерExample

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

>>> 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