2

フロントエンドの作業を処理するJSクライアントを備えたFlaskバックエンドで実行されているWebアプリケーションがあります。flask.session単純な Flask API を使用してキーと値のペアを Flask のセッション オブジェクト ( ) に保存しようとすると、問題が発生します。

変更しようとしているセッション オブジェクトが呼び出されaccount_id、2 つの 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 と正しい戻り値を返します。account_idFlask アプリケーションからログを記録すると、セッションに値 10のキーが含まれていることもわかります。ただし、 /current_account.jsonPOST リクエストが行われた直後に検索すると、単純にaccount_idwith valueが返されますnull

さらに奇妙なのは、単純なブラウザー内 REST クライアントを使用して同一の POST 要求を作成するとcurrent_account.json、セッションが機能し、ページ全体の更新などによって期待どおりに持続することです。問題は、Flask のセッション オブジェクトではなく、リクエスト自体に関係していますが、正確に何が原因なのかはわかりません。

4

1 に答える 1

3

以前のプロジェクトで同じ問題が発生し、$.ajax が Cookie を保持していないことが判明しました。この問題を解決するために手動セッション ストアを使用しました。

于 2014-01-22T05:59:47.863 に答える