Ответ
HTTP cookies — это небольшие фрагменты данных, которые сервер отправляет клиенту (браузеру), а клиент сохраняет и отправляет обратно с каждым последующим запросом. В Python работа с cookies зависит от того, действуете ли вы как клиент или как сервер.
1. Клиентская сторона (отправка и получение запросов)
Для HTTP-клиентов удобнее всего использовать библиотеку requests.
import requests
url = 'https://httpbin.org/cookies'
# Отправка cookies на сервер
my_cookies = {'user_id': '123', 'session_token': 'xyzabc'}
response = requests.get(url, cookies=my_cookies)
# Сервер вернет отправленные cookies
print("Ответ сервера:", response.json())
# Получение cookies, установленных сервером
session = requests.Session()
response_from_server = session.get('https://httpbin.org/cookies/set/framework/fastapi')
# requests.Session автоматически сохраняет и использует cookies
print("Cookies от сервера:", session.cookies.get_dict())
2. Серверная сторона (обработка запросов)
На сервере (например, в веб-фреймворке) используется стандартный модуль http.cookies для парсинга заголовка Cookie от клиента и формирования заголовка Set-Cookie для ответа.
from http.cookies import SimpleCookie
# Пример формирования заголовка Set-Cookie для отправки клиенту
cookie = SimpleCookie()
cookie['session_id'] = 'secret-token'
cookie['session_id']['path'] = '/'
cookie['session_id']['domain'] = '.example.com'
cookie['session_id']['max-age'] = 3600 # 1 час
cookie['session_id']['httponly'] = True
cookie['session_id']['samesite'] = 'Lax'
# Вывод сгенерированной строки для заголовка
print(cookie.output())
# Вывод: Set-Cookie: session_id=secret-token; Domain=.example.com; Max-Age=3600; Path=/; SameSite=Lax; HttpOnly
Атрибуты безопасности Cookies
При установке cookies важно использовать атрибуты для защиты от атак:
HttpOnly: Запрещает доступ к cookie из JavaScript на клиенте. Это защищает от XSS-атак, направленных на кражу cookie.Secure: Указывает браузеру отправлять cookie только по зашифрованному HTTPS-соединению.SameSite: Контролирует, когда cookie отправляются с межсайтовыми запросами, что является основной защитой от CSRF-атак. Значения:Strict,Lax,None.