Перейти к основному содержимому

Cookie

HTTP cookies — это небольшие фрагменты данных, хранящиеся в браузере пользователя и автоматически отправляемые с каждым запросом к тому же источнику. Они в основном используются для управления сессиями, пользовательских предпочтений и отслеживания.

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 так же просты, как работа с заголовками, путем или параметрами запроса.