7

アプリのdjangoセッションに奇妙なバグがあります。ユーザーのセッション情報が消去されることがあります(1日あたり約20000回で約10回)。ログファイルを介してトレースしました。ページAにユーザーのセッションに関する情報があり、ユーザーがフォームを送信した後、次のページで彼のセッションは空になります。memcached + dbとdbの2種類のストレージのみを試しましたが、この問題は両方に当てはまります。これらのシナリオを再現しようとしましたが、すべてが期待どおりに機能します。前述のとおり、これは非常にまれです。また、この問題はさまざまなユーザーに存在し、毎回再現されるわけではないことを確認しました。根本的な原因を突き止める方法がわからず、説明として他に何を投稿するのかわかりません。誰かアイデアがあれば教えてください。重要な場合は、django 1.2+FastCGIを使用してアプリを実行しています。ありがとう!

UPD:2つの連続したリクエスト中に、usesからのセッションキーが変更されないことを確認しました。最初のリクエストでは実際のセッション状態があり、2番目のセッションでは変数が空でリレースされます。

4

2 に答える 2

4

この問題をデバッグする方法として、標準のDjangoセッションミドルウェア(または現在使用しているもの)をサブクラス化します。

django.contrib.sessions.middleware.SessionMiddleware

そして、ラップprocess_requestして(おそらくもっと重要なことに)process_responseいくつかの追加のロギングで。MIDDLEWARE_CLASSES次に、標準のDjangoではなく、サブクラス化されたセッションミドルウェアをにインストールします。

session.save()また、それを読み戻そうとすることで、実際に変更をコミットしたことを検証することもできます。問題はセッション状態のシリアル化にあり、保存しようとしている特定のキーまたは値で失敗している可能性があります。

これで問題が解決することはありませんが、何が起こっているのかを確認するのに役立つ場合があります。

于 2012-12-30T10:13:03.447 に答える
4

@Steve Mayneが述べたように、セッションミドルウェアとセッションモデルの保存方法でロギングを行うとよいでしょう。それは私が始めたいものです。

さらに、これはデータベース関連の問題である可能性があります。特に、セッションにMySQLデータベースバックエンドを使用している場合はそうです。データベースロックやその他の同時実行性の問題についてログを確認できます。以前にも同様の問題に対処する必要がありましたが、解決策は明確です。最適化と追加のパフォーマンスです。

特定のアプリケーションミドルウェアがある場合は、Djangoセッションに干渉する機能を確認できます。このような並列操作は、適切に実装されていない場合、問題を引き起こす可能性があります。

私がするもう1つのことは、Djangoの最新の安定したリリースにアップグレードし、mod_wsgiセットアップに移行することです。

于 2012-12-30T23:14:03.543 に答える