Spec-Zone.ru › Werkzeug 0.16

Сессии

Предупреждение

Устаревшая с версии 0.15: Будет удалена в версии 1.0. Перемещена в https://github.com/pallets/secure-cookie.

werkzeug.contrib.sessions

В этом модуле содержатся некоторые вспомогательные классы, которые помогают добавить поддержку сессий к приложению WSGI на Python. Для полного хранения сессий на стороне клиента см. securecookie, который реализует безопасное хранение сессий на стороне клиента.

Интеграция с приложением

from werkzeug.contrib.sessions import SessionMiddleware, \
     FilesystemSessionStore

app = SessionMiddleware(app, FilesystemSessionStore())

Текущая сессия затем появится в среде WSGI как werkzeug.session. Однако рекомендуется использовать хранилища напрямую в приложении, а не использовать middleware. Однако для очень простых скриптов middleware для сессий может быть достаточно.

Этот модуль не реализует методы или способы проверки истечения срока действия сессии. Это должно выполняться задачей cron и зависеть от хранения. Например, для удаления неиспользуемых сессий в файловой системе можно проверить время изменения файлов. Если сессии хранятся в базе данных, метод new() должен добавлять временную метку истечения срока действия сессии.

Для лучшей гибкости рекомендуется не использовать middleware, а использовать хранилище и объект сессии напрямую в приложении:

session_store = FilesystemSessionStore()

def application(environ, start_response):
    request = Request(environ)
    sid = request.cookies.get('cookie_name')
    if sid is None:
        request.session = session_store.new()
    else:
        request.session = session_store.get(sid)
    response = get_the_response_object(request)
    if request.session.should_save:
        session_store.save(request.session)
        response.set_cookie('cookie_name', request.session.sid)
    return response(environ, start_response)

Справочник

class werkzeug.contrib.sessions.Session(data, sid, new=False)

Подкласс словаря, который отслеживает изменения объектов напрямую. Изменения в изменяемых структурах не отслеживаются; для них необходимо установить modified в True вручную.

sid

Идентификатор сессии в виде строки.

new

True если cookie был только что создан, иначе False

modified

Всякий раз, когда элемент в cookie устанавливается, этот атрибут устанавливается в True. Однако это не отслеживает изменения внутри изменяемых объектов в сессии:

>>> c = Session({}, sid='deadbeefbabe2c00ffee')
>>> c["foo"] = [1, 2, 3]
>>> c.modified
True
>>> c.modified = False
>>> c["foo"].append(4)
>>> c.modified
False

В этом случае его нужно установить в modified вручную, чтобы should_save мог его получить.

should_save

True, если сессия должна быть сохранена.

Изменено в версии 0.6: По умолчанию сессия теперь сохраняется только в том случае, если она изменена, а не если она новая, как было раньше.

class werkzeug.contrib.sessions.SessionStore(session_class=None)

Базовый класс для всех хранилищ сессий. Модуль Werkzeug contrib не реализует никаких полезных хранилищ, кроме файлового хранилища; разработчики приложений могут создавать свои собственные хранилища.

Параметры: session_class – Используемый класс сессии. По умолчанию Session.
delete(session)

Удалить сессию.

generate_key(salt=None)

Простая функция, которая генерирует новый ключ сессии.

get(sid)

Получить сессию для данного sid или новый объект сессии. Этот метод должен проверить, является ли ключ сессии допустимым, и создать новую сессию, если это не так.

is_valid_key(key)

Проверить, соответствует ли ключ правильным форматам.

new()

Сгенерировать новую сессию.

save(session)

Сохранить сессию.

save_if_modified(session)

Сохранить, если класс сессии требует обновления.

class werkzeug.contrib.sessions.FilesystemSessionStore(path=None, filename_template='werkzeug_%s.sess', session_class=None, renew_missing=False, mode=420)

Простой пример хранилища сессий, которое сохраняет сессии в файловой системе. Это хранилище лучше всего работает на системах POSIX и Windows Vista/Windows Server 2008 и новее.

Изменено в версии 0.6: renew_missing был добавлен. Ранее это считалось True, теперь значение по умолчанию изменено на False, и его можно явно отключить.

Параметры:
  • path – путь к папке, используемой для хранения сессий. Если не указан, используется каталог по умолчанию для временных файлов.
  • filename_template – строка шаблона, используемая для задания имени файла сессии. %s заменяется идентификатором сессии.
  • session_class – Используемый класс сессии. По умолчанию Session.
  • renew_missing – установите в True если вы хотите, чтобы хранилище предоставляло пользователю новый sid, если сессия еще не сохранялась.
list()

Отобразить все сессии в хранилище.

Новое в версии 0.6.

class werkzeug.contrib.sessions.SessionMiddleware(app, store, cookie_name='session_id', cookie_age=None, cookie_expires=None, cookie_path='/', cookie_domain=None, cookie_secure=None, cookie_httponly=False, cookie_samesite='Lax', environ_key='werkzeug.session')

Простой middleware, который помещает объект сессии из предоставленного хранилища в среду WSGI. Он автоматически устанавливает cookie и восстанавливает сессии.

Однако middleware не является предпочтительным решением, потому что он не будет таким же быстрым, как сессии, управляемые самим приложением, и добавит в среду WSGI ключ, относящийся только к приложению, что противоречит концепции WSGI.

Параметры cookie такие же, как для функции dump_cookie(), только с префиксом cookie_. Кроме того, max_age называется cookie_age, а не cookie_max_age, из-за обратной совместимости.

© 2007–2020 Pallets
Licensed under the BSD 3-clause License.
https://werkzeug.palletsprojects.com/en/0.16.x/contrib/sessions/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API