访问 flask-socketio 会话的问题

Posted

技术标签:

【中文标题】访问 flask-socketio 会话的问题【英文标题】:Trouble with accessing flask-socketio session 【发布时间】:2016-05-12 23:44:17 【问题描述】:

当我使用 flask-socketio 运行本地应用程序时,我可以使用 from flask import session 访问 session,但是当我使用服务器上的 gunicorn 运行它时 (gunicorn --worker-class eventlet -w 1 app:app)它以 Array[0] 的形式返回我 session.keys()

如何修复它以在服务器上建立这个本地代理与会话?

谢谢

from flask import Flask, render_template, session, request
from flask_socketio import SocketIO, emit

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)


@app.before_request
def before_request():
    session['key_1'] = 'Hello,'
    session['key_2'] = 'World'


@app.route('/')
def index():
    return render_template('index.html')


@socketio.on('connect', namespace='/')
def socket_connect():
    session_keys = session.keys()
    emit('connect response', 
        'session_keys': session_keys
    )


@socketio.on('disconnect', namespace='/')
def socket_disconnect():
    print('Client disconnected', request.sid)

if __name__ == '__main__':
    socketio.run(app)

【问题讨论】:

您没有包含模板,但我不确定这是否会真正改变任何东西。我在这里用一个组成的模板尝试你的代码,我确实看到了会话密钥,有或没有 gunicorn。您的设置中是否还有其他未提及的组件? 是的,我的错。测试了简单的,效果很好,但是在我复杂的项目中,它使用了redis,mongodb组件,也许这可能是它没有显示会话的原因。 【参考方案1】:

我找到了解决方案。 会话消失,无法共享到 socketio,因为我在 cloudflare 上为我的域添加了重定向页面规则。 当我将所有规则的转发类型更改为 302 - 临时一切正常。

【讨论】:

以上是关于访问 flask-socketio 会话的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何访问使用 websockets 发送的烧瓶中的 formData?Flask-SocketIO

如何使用 Flask-SocketIO 修复此 KeyError 错误?

在两个烧瓶服务器之间共享会话

如何在 docker 容器中设置 flask-socketio?

个人技术总结——flask-socketio框架

Flask-socketio,向另一个命名空间发出事件