至少这是一个不起眼的问题,我相信我正在寻找一些东西。我正在运行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的情况下对此进行了测试,问题仍然存在。什么都不是中间人。
答案 0 :(得分:1)
所以,看起来我找到了解决方案。在我的代码中,上面没有提到,我有以下内容:
@app.route('/unset')
def unset_user():
flask.session = {}
return flask.jsonify(success=True)
看起来,当您将flask.session设置为字典时,就会出现这种情况。我应该一直使用flask.session.clear()
。
立即测试,一切看起来都很棒。耶!