API интерфейса сессий Flask

SessionInterface — это низкоуровневая абстракция Session, позволяющая заменить стандартное хранилище Cookie в Flask на внешнее хранилище, такое как Redis, базы данных и т. д.

Пользовательским реализациям достаточно унаследоватьSessionInterfaceи реализовать два метода.


SessionInterface — абстрактный базовый класс

Атрибуты/Методы Описание
null_session_class Класс, используемый, когда Session недоступен. По умолчанию — NullSession.
pickle_based bool: указывает, основан ли Session на сериализации pickle. По умолчанию — False.
open_session(app, request) Читает данные Session из запроса. Возвращает экземпляр SessionMixin или None.
save_session(app, session, response) Сохраняет данные Session в ответ.
make_null_session(app) Создаёт пустой Session (автоматически вызывается, когда open_session возвращает None).
is_null_session(obj) Определить, является ли это экземпляром NullSession

Метод параметров Cookie

Следующие методы используются для получения атрибутов Session Cookie и могут быть переопределены:

Методы Описание
get_cookie_name(app) Получить имя Cookie. По умолчанию считывает конфигурацию SESSION_COOKIE_NAME
get_cookie_domain(app) Получить домен Cookie. По умолчанию считывает конфигурацию SESSION_COOKIE_DOMAIN
get_cookie_path(app) Получить путь Cookie. По умолчанию считывает SESSION_COOKIE_PATH или APPLICATION_ROOT
get_cookie_httponly(app) Получить флаг HttpOnly. По умолчанию считывает SESSION_COOKIE_HTTPONLY
get_cookie_secure(app) Получить флаг Secure. По умолчанию читает SESSION_COOKIE_SECURE
get_cookie_samesite(app) Получить значение SameSite. По умолчанию читает SESSION_COOKIE_SAMESITE
get_cookie_partitioned(app) Получить флаг Partitioned. По умолчанию читает SESSION_COOKIE_PARTITIONED (v3.1+)
get_expiration_time(app, session) Получить время истечения сессии. Постоянная сессия возвращает now + lifetime
should_set_cookie(app, session) Определить, нужно ли устанавливать Cookie. Когда сессия изменена или permanent + SESSION_REFRESH_EACH_REQUEST

Встроенные реализации

Класс Описание
SecureCookieSessionInterface Реализация по умолчанию. Использует itsdangerous Cookie для хранения данных сессии. key_derivation="hmac", digest_method=sha
SecureCookieSession Класс Session, основанный на CallbackDict. Обнаруживает изменения ключей верхнего уровня и автоматически устанавливает modified=True
NullSession Заполнитель Session, используемый, когда SECRET_KEY не задан. Чтение работает как обычно, изменение вызывает ошибку.
SessionMixin Миксин для классов Session. Предоставляет свойства permanent, new, modified, accessed

Заменить реализацию Session по умолчанию

Пример

from flask import Flask
from flask.sessions import SessionInterface, SessionMixin

# Пользовательский класс Session
class MySession(dict, SessionMixin):
    pass

# Пользовательский интерфейс Session
class MySessionInterface(SessionInterface):
    def open_session(self, app, request):
        # Загрузить сессию из запроса
        user_id = request.headers.get("X-User-ID")
        if user_id:
            return MySession(user_id=user_id)
        return MySession()

    def save_session(self, app, session, response):
        # Сохранить сессию в ответ
        if "user_id" in session:
            response.headers["X-Session-ID"] = session["user_id"]

app = Flask(__name__)
# Заменить стандартную реализацию Session
app.session_interface = MySessionInterface()
Другие расширения