删除 Flask 会话

Removing Flask session

登录后在我的应用程序中,我设置:

session['venue_id'] = True

在我的 javascript 然后我连接到我的 websocket:

var socket = io.connect('http://my.ip.address.' + ':' + '80' + namespace);  

这会在我的服务器上触发以下代码:

@socketio.on('connect', namespace='/test')
def test_connect():
    if session.get('venue_id'):
       session.pop('venue_id', None)
    else:
        request.namespace.disconnect()  

在此之后,我对我的 API 进行了某些调用,检查:

if session.get('venue_id')

然而,它总是顺利进行。我原以为这些 requests 不会通过 if 声明,因为 venue_id 已经 popped?

我在这里阅读了答案:Python + Flask - Removing key from session too fast

但现在我很困惑 session.pop('venue_id', None) 的目的是什么?

如果能帮助解决这个问题,我们将不胜感激。

您需要发送(非 websocket)响应来更改会话。只是弹出值什么都不做,因为浏览器不会更新它的一侧,只是在下一个请求时再次发送数据。现在,应用程序:

  1. 登录,设置值,returns响应
  2. 发送请求(对于 websocket),发送值
    1. 套接字发送的任何响应都发生在 test_connect 事件处理程序之前,因此不会弹出值
    2. 事件处理程序运行,无法告诉浏览器会话已更改
  3. 浏览器发送对其他页面的请求,发送值

可能最简单的解决方案是在服务器端存储会话,您甚至可以在不发送响应的情况下更改它。