有没有办法在flask-socketio事件中修改flask会话?

时间:2019-04-22 11:21:36

标签: 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 个答案:

答案 0 :(得分:2)

前一段时间,我写了一篇有关该主题的博客文章和视频,因为这很棘手。这是帖子:https://blog.miguelgrinberg.com/post/flask-socketio-and-the-user-session

简而言之,不能从Socket.IO处理程序修改基于cookie的会话,这仅仅是因为无法通过WebSocket设置cookie。如果切换到Flask-Session之类的服务器端会话扩展,则在Socket.IO处理程序中进行的更改不需要在客户端中设置cookie,因此在这种情况下,更改可以保存并可以从HTTP访问路线。