9

最新の Flask/Werkzeug (Flask 0.9) クライアント側セッションを使用して、リクエスト間で情報を保持しています。セッションは永続的に設定されていません (ブラウザを閉じたときに Cookie が削除されても問題ないため)。

私の問題は次のとおりです。

サーバー側コードを使用して、Flask セッション変数にエントリを入力します。この後、Session 変数は次のようになります。

<SecureCookieSession {u'items': SOMENOTVERYIMPORTANTDICTIONARY}, '_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}*>

この情報を使用して、同じ Flask アプリケーションに対して (JQuery を介して) GET 要求を実行するページをレンダリングしますが、突然、セッションの「項目」エントリを含む辞書がなくなりました。

<SecureCookieSession {'_fresh': True, 'user_id': u'1', 'csrf': '0aef1995cdf2cxx0233fdf3321d17fc7267f3b32', '_id': 'someUNIQUEcode'}>

私はいくつかの検索を行い、ローカルホストでテストしているという事実に関連している可能性があると考えました (127.0.0.1 はローカルホストと同じではありません)。ホスト ファイルを修正し、「dev.localhost」エントリを追加して、すべてのリクエストが同じホストからのものであることを確認しました。

また、ブラウザ (Chrome) の開発者ペインには、サーバーに送信されるセッション Cookie の識別子がまったく同じように表示されます。

また、設定session.modified = Trueは役に立ちません。

リクエスト間で変更される唯一のことは、

__utmb=122666782.18.10.1363877633

最初のリクエスト (itemsエントリを入力するリクエスト) と 2 番目のリクエストの比較

__utmb=122666782.19.10.1363877633

それはまだAjax関連のものかもしれないと考えています。簡単なページのリロード後にセッション変数の内容をテストしましたitems。エントリはまだセッションから削除されています。

どんな助けでも大歓迎です。

4

1 に答える 1

11

クライアント (Chrome) に送り返される Cookie が、Cookie サイズの制限である 4096 バイトを超えていることが判明しました。どうやらDjangoはデフォルトでサーバー側のセッションを使用しているため、コードをFlaskに移動したときにのみこの問題が発生しました。Flask -kvsessionなどの Flask でサーバー側セッションを使用すると、問題が解決するはずです。

于 2013-03-22T09:56:07.647 に答える