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