Сессии
Предупреждение
Устарело начиная с версии 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/