Spec-Zone.ru › Werkzeug 0.15

Сессии

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

Устарело начиная с версии 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.15.x/contrib/sessions/

Spec-Zone.ru

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