我有一个在 Flask 后端运行的 Web 应用程序,并有一个处理前端工作的 JS 客户端。我在尝试通过简单的 Flask API 将键值对保存到 Flask 的 session 对象 (flask.session
) 时遇到问题。
我尝试修改的 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 应用程序记录还显示, session 现在包含值为 10 的键 account_id
。但是,在发出 POST 请求后立即查找 /current_account.json
只是返回值为 null
的 account_id
。
更奇怪的是,使用简单的浏览器内 REST 客户端并向 current_account.json
发出相同的 POST 请求会导致 session 通过全页刷新等按预期工作并持续。既然如此,它让我相信问题与请求本身有关,而不是与 Flask 的 session 对象有关,尽管我似乎无法弄清楚到底是什么导致了它。
最佳答案
在我之前的项目中,我们遇到了同样的问题,结果发现$.ajax不携带cookie。我们使用手动 session 存储来解决这个问题。
关于python - Flask session 不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12915989/