flask.session在所有连接中共享

时间:2015-09-04 05:30:17

标签: python session nginx flask uwsgi

至少这是一个不起眼的问题,我相信我正在寻找一些东西。我正在运行Flask应用程序,该应用程序使用flask.session在用户会话中存储非常基本的字符串。

服务器设置为通过Nginx -> uwsgi (emperor mode) -> Flask application

以下是我在请求的某些@app.route()包装函数上使用的装饰器,这样我就可以验证信息是否在会话中:

def verify(method):
    @wraps(method)
    def wrapper(*args, **kwargs):
        data = flask.request.get_json() or flask.request.form or flask.request.args
        if 'name' in flask.session:
            return method(*args, **kwargs)
        elif data.get("name"):
            if is_user(data.get("name")):
                flask.session['name'] = data.get("name")
                return method(*args, **kwargs)
            return flask.jsonify(success=False, message='Incorrect information supplied.')
        else:
            return flask.jsonify(success=False, message='Not all information supplied.')
    return wrapper

我正在利用上述方法以及访问会话的一种示例方式:

@app.route('/api/user')
@verify
def api_route():
    # .. misc code here ..
    return flask.jsonify(success=True, user=flask.session['name'])

现在..让我说我使用Chrome访问,并确保会话已设置。现在,我去一些随机服务器,并卷曲特定的api端点,它正在拉动浏览器共享的会话:

[~]$ curl -4s https://domain.com/api/user
{
  "success": true,
  "user": "liam"
}

我相信这可能是由于Nginx和/或uwsgi,但我不确定。我对Nginx和其他各种网站使用了相同的配置,我从未见过像这样的问题。

之前看过吗?我还有另一种方式来处理会话吗?我能提供的任何其他信息可以指出我在正确的位置吗?

修改

我在没有Nginx和uwsgi的情况下对此进行了测试,问题仍然存在。什么都不是中间人。

1 个答案:

答案 0 :(得分:1)

所以,看起来我找到了解决方案。在我的代码中,上面没有提到,我有以下内容:

@app.route('/unset')
def unset_user():
    flask.session = {}
    return flask.jsonify(success=True)

看起来,当您将flask.session设置为字典时,就会出现这种情况。我应该一直使用flask.session.clear()

立即测试,一切看起来都很棒。耶!