Cookie
HTTP cookies — это небольшие фрагменты данных, хранящиеся в браузере пользователя и автоматически отправляемые с каждым запросом к тому же источнику. Они в основном используются для управления сессиями, пользовательских предпочтений и отслеживания.
Как выглядят параметры Cookie?
GET /dashboard HTTP/1.1
Host: example.com
Cookie: session_id=abc123; theme=dark
Cookies передаются как единый заголовок (Cookie
), но внутренне содержат множественные пары ключ=значение, разделенные точками с запятой.
Когда использовать Cookies
В отличие от заголовков или параметров запроса, которые устанавливаются для каждого запроса, cookies предоставляют способ сохранения пользовательского состояния между множественными запросами. Вот несколько общих случаев использования:
-
Session ID: Сохраняет пользователей авторизованными, храня токен сессии (session_id)
-
CSRF Token: Помогает защитить от атак подделки межсайтовых запросов
-
Пользовательские предпочтения: Хранит настройки UI, такие как тема, язык или макет
-
Аналитика и отслеживание: Хранит информацию о деятельности пользователя для инструментов, таких как Google Analytics
Объявление Cookies в lihil
В Lihil вы можете объявлять cookies таким же образом, как заголовки или параметры запроса через Param("cookie")
.
from lihil import Route, Param
from typing import Annotated
dashboard = Route("/dashboard")
@dashboard.get
async def show_dashboard(
session_id: Annotated[str, Param("cookie")],
theme: Annotated[str, Param("cookie")] = "light",
):
return {"session": session_id, "theme": theme}
В приведенном выше примере:
-
session_id
является обязательным cookie -
theme
является опциональным и возвращается к "light", если не предоставлен
Конвертация типов и валидация
Точно так же, как с заголовками или параметрами запроса, вы можете применять аннотации типов и ограничения валидации к cookies. Например:
from lihil import Param
from typing import Annotated
user_id: Annotated[int, Param("cookie", gt=0)]
Это обеспечит, что cookie user_id
разбирается как положительное целое число. Если разбор или валидация не удается, lihil вернет 422 Invalid Request.
Короче говоря, cookies предоставляют легковесный механизм для хранения и передачи пользовательских данных. С lihil, извлечение и валидация значений cookie так же просты, как работа с заголовками, путем или параметрами запроса.