删除 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)响应来更改会话。只是弹出值什么都不做,因为浏览器不会更新它的一侧,只是在下一个请求时再次发送数据。现在,应用程序:
- 登录,设置值,returns响应
- 发送请求(对于 websocket),发送值
- 套接字发送的任何响应都发生在
test_connect
事件处理程序之前,因此不会弹出值
- 事件处理程序运行,无法告诉浏览器会话已更改
- 浏览器发送对其他页面的请求,发送值
可能最简单的解决方案是在服务器端存储会话,您甚至可以在不发送响应的情况下更改它。
登录后在我的应用程序中,我设置:
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)响应来更改会话。只是弹出值什么都不做,因为浏览器不会更新它的一侧,只是在下一个请求时再次发送数据。现在,应用程序:
- 登录,设置值,returns响应
- 发送请求(对于 websocket),发送值
- 套接字发送的任何响应都发生在
test_connect
事件处理程序之前,因此不会弹出值 - 事件处理程序运行,无法告诉浏览器会话已更改
- 套接字发送的任何响应都发生在
- 浏览器发送对其他页面的请求,发送值
可能最简单的解决方案是在服务器端存储会话,您甚至可以在不发送响应的情况下更改它。