#python-3.x #flask #flask-socketio
#python-3.x #flask #flask-socketio
Вопрос:
Я попробовал следующее:
@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:
Некоторое время назад я написал сообщение в блоге и видео на эту тему, потому что это сложно. Вот сообщение: https://blog.miguelgrinberg.com/post/flask-socketio-and-the-user-session .
Короче говоря, сеансы на основе файлов cookie не могут быть изменены из сокета.Обработчик ввода-вывода, просто потому, что нет способа установить файлы cookie через WebSocket. Если вы переключаетесь на расширение сеанса на стороне сервера, такое как Flask-Session, то изменения, которые вы вносите в свой сокет.Обработчикам ввода-вывода не требуется устанавливать cookie в клиенте, поэтому в этом случае изменения сохраняются и доступны по HTTP-маршрутам.