Есть ли способ изменить сеанс фляги внутри события фляги-сокета? - PullRequest
1 голос
/ 22 апреля 2019

Я попробовал следующее:

@socketio.on("signup req")
def signup_req(json):
    print(f"Response! {json}")
    socketio.emit("signup res", "RECEIVED!")
    session["user"] = {"name": json["name"]}

но когда я хочу получить к нему доступ, сделав:

@app.route('/')
def index():
    ...
    print(session["user"])
    ...

Я получу KeyError, что означает, что ключ не был сохранен в сеансе.

1 Ответ

2 голосов
/ 22 апреля 2019

Я написал пост в блоге и видео по этой теме некоторое время назад, потому что это сложно. Вот этот пост: https://blog.miguelgrinberg.com/post/flask-socketio-and-the-user-session.

Короткая история заключается в том, что сеансы на основе файлов cookie не могут быть изменены из обработчика Socket.IO просто потому, что невозможно установить файлы cookie через WebSocket. Если вы переключаетесь на расширение сеанса на стороне сервера, такое как Flask-Session, то изменения, которые вы вносите в свои обработчики Socket.IO, не нуждаются в куки-файле для установки в клиенте, поэтому в этом случае изменения сохраняются и доступны из HTTP. маршруты.

...