Всё о работе с cookie в Python — класс http.cookies
Модуль http.cookies реализует парсер для cookie, по большей части совместимый с RFC 2109 — документом со стандартами работы с cookie и смежными вещами.
Стоит отметить, что реализация чуть менее строгая, чем стандарт, так как Microsoft Internet Explorer 3.0x, а позже современные браузеры облегчили правила для работы с cookie.
Создание и установка значения Cookie
Cookie используются как инструмент для поддержания текущего состояния в браузерных приложениях, поэтому чаще всего они создаются, изменяются и используются сервером, а хранятся у пользователя. Самый простой пример создания пары ключ-значение:
# http_cookies_setheaders.py
from http import cookies
c = cookies.SimpleCookie()
c['mycookie'] = 'cookie_value'
print(c)
Выводом является валидный Set-Cookie заголовок, готовый к передаче клиенту как часть HTTP ответа.
Morsel
Также вы можете управлять другими параметрами cookie, такими как время жизни записи, путь и домен. Оказывается, что всеми RFC атрибутами можно управлять с помощью объекта Morsel.
Этот пример включает в себя два различных метода для создания cookie с датой истечения срока жизни. Один устанавливает max-age как количество секунд жизни cookie с момента создания, другой устанавливает параметр expires как дату и время, когда cookie должна быть удалена.
Оба объекта Cookie и Morsel ведут себя как словари. Morsel отвечает за фиксированный набор значений: expires, path, comment, domain, max-age, secure, version.
Закодированные значения
Заголовок cookie должен быть закодирован для того, чтобы потом он был правильно распарсен.
Morsel.value всегда является закодированным значением cookie, в то время как Morsel.coded_value всегда является представлением, которое используется для передачи значения клиенту. Оба значения всегда являются строками. Значения, которые не являются строками, будут автоматически преобразованы в нужный тип.
Получение и парсинг заголовков Cookie
После того, как Set-cookie заголовки переданы клиенту, он будет возвращать их на сервер в последующих запросах, используя заголовок Cookie. Входящий заголовок может содержать несколько cookie, разделённых символами ;:
В зависимости от веб-сервера и фреймворка, cookie доступы либо прямо из заголовка, либо из значения HTTP_COOKIE.
Чтобы их раскодировать, передайте нужную часть cтроки в SimpleCookie, либо используйте метод load().
Альтернативные форматы вывода
Кроме использования заголовка Set-Cookie, серверы поставляют JavaScript, который добавляет cookie клиенту. SimpleCookie и Morsel генерируют JavaScript при использовании метода js_output().
Результатом является готовый тег script для задания нужных значений cookie.
Last updated