Другой подход, который напоминает мне старые добрые времена в PHP с использованием trans-sid
, заключался бы в передаче session_id в URL-адресе и сохранении сеанса на бэкэнде, чтобы параметры URL-адреса не становились слишком большими (в случае большого сеанса магазины).
Вы можете реализовать это, используя комбинацию сигналов @app.url_defaults
и @app.url_value_preprocessor
, также известных как препроцессоры URL Flask а>.
Это зависит от того, правильно ли вы используете url_for, потому что туда будет добавлен идентификатор сеанса. Давайте сделаем короткое доказательство концепции:
@app.url_defaults
def add_session_id(endpoint, values):
if 'session_id' in values:
# Allows to manually override the session_id, might not be wanted.
return
if g.session_id:
values['session_id'] = g.session_id
@app.url_value_preprocessor
def pull_session_id(endpoint, values):
g.session_id = values.pop('session_id', None)
Теперь все, что вам нужно сделать, это сохранить сеанс в удобном месте (например, используя БД или Redis и установите session_id с помощью g.session_id = session_id_here
.
В каждом последующем запросе g.session_id должен быть тем же идентификатором сеанса, потому что url_for
должен добавлять ?session_id=yoursessionid
к URL-адресу. Ваша аутентификация должна проверить наличие g.session_id
и действовать соответствующим образом.
Обратите внимание, что если ваш сеанс остается небольшим, вы, вероятно, можете сохранить весь сеанс в параметре url вместо идентификатора.
person
Menno
schedule
22.02.2014