2

我有一个在 Flask 后端运行的 Web 应用程序,其中一个 JS 客户端处理前端工作。flask.session我在尝试通过简单的 Flask API将键值对保存到 Flask 的会话对象 () 时遇到问题。

我试图修改的会话对象被调用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 应用程序的日志还显示会话现在包含值为 10 的键。但是,在发出 POST 请求后立即account_id查找只会返回一个带值的值。/current_account.jsonaccount_idnull

更奇怪的是,使用简单的浏览器内 REST 客户端并发出相同的 POST 请求以current_account.json使会话通过整页刷新等按预期工作和持续存在。既然是这样,它让我相信问题与请求本身有关,而不是与 Flask 的会话对象有关,尽管我似乎无法弄清楚究竟是什么导致了它。

4

1 回答 1

3

在我之前的项目中,我们遇到了同样的问题,结果表明 $.ajax 不携带 cookie。我们使用手动会话存储来解决问题。

于 2014-01-22T05:59:47.863 回答