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

问题描述 投票:1回答:1

我尝试了以下方法:

@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,这意味着密钥没有存储在会话中。

python-3.x flask flask-socketio
1个回答
2
投票

我刚才写了一篇关于这个主题的博客文章和视频,因为它很棘手。这是帖子:https://blog.miguelgrinberg.com/post/flask-socketio-and-the-user-session

简短的故事是,无法从Socket.IO处理程序修改基于cookie的会话,因为没有办法在WebSocket上设置cookie。如果切换到服务器端会话扩展(如Flask-Session),则在Socket.IO处理程序中所做的更改不需要在客户端中设置cookie,因此在这种情况下,更改将保存并可从HTTP访问路线。

© www.soinside.com 2019 - 2024. All rights reserved.