Ответ
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.
Ответ 18+ 🔞
Давай разберём эту тему про куки, а то у некоторых в голове от неё каша, как у меня после вчерашнего застолья.
Смотри, куки — это такие маленькие бумажки-напоминалки, которые сервер тебе в браузер суёт, а ты их потом при каждом обращении обратно показываешь, типа «я свой, пустите». В Питоне с ними работать — как с картошкой: есть два способа — ты её ешь (клиент) или готовишь (сервер).
1. Ты — голодный клиент (хочешь куки)
Тут всё просто, как три копейки. Берёшь библиотеку requests — она твой лучший друг, лопата и сковородка в одном флаконе.
import requests
url = 'https://httpbin.org/cookies'
# Прикидываешься своим, подсовываешь свои куки
my_cookies = {'user_id': '123', 'session_token': 'xyzabc'}
response = requests.get(url, cookies=my_cookies)
# Сервер, такой доверчивый, тебе же их и возвращает
print("Ответ сервера:", response.json())
# А вот если сервер сам тебе хочет куки всунуть
session = requests.Session()
response_from_server = session.get('https://httpbin.org/cookies/set/framework/fastapi')
# Session — он как жадная сука, всё собирает и хранит
print("Cookies от сервера:", session.cookies.get_dict())
2. Ты — щедрый сервер (раздаёшь куки)
Тут уже надо мозги включать. Работаешь с http.cookies, это как на кухне с продуктами — всё по рецепту, а то отравишь клиента.
from http.cookies import SimpleCookie
# Начинаешь готовить печеньки для раздачи
cookie = SimpleCookie()
cookie['session_id'] = 'secret-token'
cookie['session_id']['path'] = '/'
cookie['session_id']['domain'] = '.example.com'
cookie['session_id']['max-age'] = 3600 # Жить будет час, не вечно же
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
Броня для печенек, или Как не стать раздатчиком отравы
А вот это, блядь, самое важное! Кидать куки без защиты — это как оставить ключи от квартиры в двери. Запомни три волшебных слова:
HttpOnly: Это чтоб какой-нибудь еблан через JavaScript не стырил твои куки. Включай всегда, если не хочешь стать жертвой XSS.Secure: Эта штука велит браузеру таскать куку только по HTTPS. Без неё — всё летит открытым текстом, всем видно, позор на всю деревню.SameSite: Настоящий спаситель от CSRF-атак, ёпта! Решает, посылать ли куки при запросах с других сайтов.Strict— никогда,Lax— только безопасные запросы,None— да похуй, но только сSecure.
Вот и вся наука. Главное — не забывай эти атрибуты ставить, а то потом будешь чесать репу, куда делась сессия пользователя.