我有一个在Flask后端运行的Web应用程序,其中一个JS客户端处理前端工作。我试图通过简单的Flask API将键值对保存到Flask的会话对象(flask.session
)时遇到问题。
我尝试修改的会话对象名为account_id
,两条API路径基本上如下所示:
获取
@access_service.route('/current_account.json', methods=['GET'])
@login_required
def show_current_account():
return jsonify(account_id=session.get('account_id'))
发表
@access_service.route('/current_account.json', methods=['POST'])
@login_required
def update_current_account():
if request.json:
session['account_id'] = request.json['account_id']
return jsonify(account_id=session.get('account_id'))
return jsonify()
在JS前端,对POST路由的调用如下:
$.ajax({
url: '/current_account.json',
contentType: 'application/json',
type: 'POST',
data: JSON.stringify({ 'account_id': 10 })
});
哪个似乎正常工作,ajax调用返回200 OK和正确的返回值。从Flask应用程序中记录还会显示会话现在包含值为account_id
且值为10.但是,在发出POST请求后立即查找/current_account.json
只会返回值为account_id
的{{1}} {1}}。
使用简单的浏览器内REST客户端并向null
发出相同的POST请求仍然是一个陌生人,这会导致会话通过整页刷新等工作并按预期保持。在这种情况下,它让我相信问题与请求本身有关,而不是与Flask的会话对象有关,尽管我似乎无法弄清楚到底是什么造成了它。
答案 0 :(得分:3)
在我之前的项目中,我们遇到了同样的问题,结果证明$ .ajax不带cookie。我们使用手动会话存储来解决问题。