API сессий Flask

Сессия используется для сохранения данных между разными запросами одного и того же пользователя. Flask реализует её с помощью подписанных cookies по умолчанию; данные хранятся на клиенте, но не могут быть подделаны.

Черезfrom flask import sessionимпортируйте и используйте как словарь.


Прокси-объект session

sessionЭто прокси, указывающий на экземпляр SessionMixin текущего запроса. Он доступен только в контексте запроса.

Атрибуты/Методы Описание
session[key] = value Установить значение сессии
session.get(key, default) Безопасно получить значение сессии, возвращая default, если ключ не существует.
session.pop(key, default) Удалить и вернуть значение для указанного ключа.
session.clear() Очистить все данные сеанса.
"key" in session Проверить, существует ли ключ
session.permanent Если установлено значение True, сеанс сохраняется после закрытия браузера (используется PERMANENT_SESSION_LIFETIME)
session.modified При изменении изменяемых значений в session (например, при добавлении в список) нужно вручную установить значение True.
session.accessed Если True, то при доступе к сеансу Flask автоматически добавляет заголовок Vary: Cookie
session.new Является ли сеанс только что созданным (некоторые реализации не поддерживают точное определение).

При изменении вложенных изменяемых объектов в сессии (таких как списки, словари) Flask не может автоматически обнаружить изменение.

Нужно установить вручнуюsession.modified = TrueИначе изменение не будет сохранено в Cookie.


Элемент конфигурации

Ключ конфигурации Значение по умолчанию Описание
SECRET_KEY Отсутствует Секретный ключ для подписи Session; его необходимо задать, чтобы использовать Session.
SESSION_COOKIE_NAME "session" Имя cookie сессии
SESSION_COOKIE_DOMAIN Отсутствует Атрибут Domain для Cookie
SESSION_COOKIE_PATH Отсутствует Атрибут Path для Cookie
SESSION_COOKIE_HTTPONLY True Запретить доступ JavaScript к Session Cookie
SESSION_COOKIE_SECURE False Когда True, cookies отправляются только по HTTPS
SESSION_COOKIE_SAMESITE Отсутствует "Strict", "Lax", или None
PERMANENT_SESSION_LIFETIME timedelta(days=31) Срок действия постоянной сессии.
SESSION_REFRESH_EACH_REQUEST True Обновлять срок действия Cookie сессии при каждом запросе.

Примеры кода

Пример

from flask import Flask, session, redirect, url_for

app = Flask(__name__)
app.secret_key = "your-secret-key"

@app.route("/")
def index():
    if "username" in session:
        return f'Вы вошли как {session["username"]}'
    return 'Вы не вошли в систему'

@app.route("/login", methods=["GET", "POST"])
def login():
    if request.method == "POST":
        session["username"] = request.form["username"]
        # Установить постоянную сессию (сохраняется 31 день после закрытия браузера)
        session.permanent = True
        return redirect(url_for("index"))
    return '<form method="post"><input name="username"></form>'

@app.route("/appends")
def append_to_list():
    # Примечание: изменение вложенных списков требует ручной пометки изменённых
    if "items" not in session:
        session["items"] = []
    session["items"].append("new_item")
    session.modified = True  # Нужно отметить вручную!
    return f'Items: {session["items"]}'

@app.route("/logout")
def logout():
    session.clear()
    return redirect(url_for("index"))
Другие расширения