2

LinuxボックスのApacheでmod_pythonを介してDjangoを実行しています。カスタム認証バックエンドと、静的コンテンツを除くすべてのページで認証を必要とするミドルウェアがあります。

私の問題は、ログインした後も、時々ログイン画面がランダムに表示されることです。各Apacheプロセスには独自のpythonプロセスがあり、それが独自の内部構造を持っているようです。そのため、ログインしたのと同じプロセスでサービスが提供される限り、すべてがうまく機能します。しかし、リクエストが別の apache プロセスによって処理されると、認証されなくなります。

FireBug で送信した HTTP ヘッダーを確認しましたが、毎回同じです。同じクッキー。

これは既知の問題ですか?回避策や修正方法はありますか?

編集:生成された画像を多数表示するページがあります。これらの一部は表示されません。これは、認証ミドルウェアの背後にあるため、ランダムにログイン イメージを表示するためです。ただし、このページを十分に更新すると、最終的には機能し、すべてのプロセスが私のセッションを認識します。

4

5 に答える 5

2

Apache がプロセスを処理する方法については正しいです。別のプロセスによって処理される場合もあります。これは、サイトに変更を加えたときに確認できます。新しいプロセスは変更を反映しますが、古いプロセスは古いサイトを提供します。一貫性を保つには、Apache を再起動する必要があります。

再起動しても問題が解決しないと仮定すると、認証の一部をメモリに保存する「カスタム認証バックエンド」に何かがあると思います(Webサーバーではうまく機能しません)。Apache 設定で 1 に設定MaxRequestsPerChildして、ログイン画面が表示されるかどうかを確認してみます。もしそうなら、何かがメモリに保存されていますか、おそらくモデルが保存されていませんか?

それが役立つことを願っています!

PS 好奇心から、カスタム認証バックエンドとミドルウェアを使用して、ユーザーがログインしていることを確認するのはなぜですか? Django の contrib.auth と @login_required の方が簡単なようです...

于 2008-10-03T12:15:14.397 に答える
0

標準のデータベース駆動型セッションはありますか?設定でキャッシュが有効になっていますか?

于 2008-10-03T12:04:32.920 に答える
0

MaxRequestsPerChild を 1 に設定しないことを強くお勧めします。これは、各プロセスが強制終了され、リクエストごとに再生成されるため、オーバーヘッドが大きくなるからです。

Apache プリフォーム MPM またはワーカー MPM を使用していますか?

http://docs.djangoproject.com/en/dev/howto/deployment/modpython/?from=olddocsを見てください。助けになるかもしれません

于 2008-10-05T04:00:50.227 に答える
0

Apache の再起動 (または停止して開始) 後にセッションがクリアされないようにするにはどうすればよいですか?

ソース コードをアップグレードして Apache を再起動すると、Web ページが更新され、そこで再度ログインする必要があるためです。セッションが失われました。

セッションは Memcache に保存されます。どのように、なぜそれがクリアされたのかわかりません。Apache の再起動後にユーザーがログインする必要がないようにセッションを保持する方法は?

于 2013-02-12T10:53:25.387 に答える