2009-10-22 1 views
5

最近私のDjangoアプリケーションでmemcachedを使用してサイトワイドキャッシュを実装しましたが、を約500秒に設定し、 Webアプリケーション。Djangoによるサイトワイドキャッシュ - ログアウト時にパスワードで保護されたページに関する問題

問題は、ユーザーがログアウトしたときにフォームが正常に動作するためですが、サイトのパスワードで保護された部分に移動すると、アプリケーションはあたかもログに記録されているかのように動作します彼らは "リフレッシュ"をヒットしない限り。 私はキャッシングするのが初めてで、これを防ぐために何か賢いことができるのだろうかと思っていますか?

答えて

7

私は同様の問題に遭遇しました。標準的なDjangoの方法は、認証されたユーザーのキャッシュを無効にすることです。

#settings.py 
CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True 

異なるユーザーが別のページ(例:そのユーザー名)を表示して、1つのバージョンを持つことはできません。

ページのバージョンが2つしかない場合は、認証されたユーザーと他のユーザーのために、認証されたユーザーのキャッシュを完全に無効にすることは好ましくありません。私はappと書いていますが、この他にも、この場合はキャッシュを微調整することが可能です。

更新。

ところで、あなたは「リフレッシュ」をクリックすると、正しいバージョンのページが受信されたことに言及しました。つまり、問題はクライアント側のキャッシュ(ExpiresヘッダーまたはEタグ)であり、サーバーキャッシュではありません。

クライアント側のキャッシュを防止するには、同じURLに複数のバージョンのページがある場合は、@cache_control(must_revalidate=True)デコレータを使用します。

+0

2つではなく3つのバージョンを使用している場合、あなたのアプリは好奇心から外れますか? (匿名、認証済み、スタッフ)? – Powerlord

+0

はい。リクエストされたものに基づいて異なるバージョンのページを使用することができます。つまり、ユーザーごとにキャッシュされたページや、ユーザーの属性でキャッシュされたページ、またはCookieでキャッシュされたページを持つことができます。 –

+0

..またはGETパラメータでキャッシュされたページ –

1

サイトでパスワードで保護されている部分では、データを取得する前にユーザーが登録されているか匿名であるかどうかをチェックします(キャッシュからデータを取得する可能性があります)。

する必要があります。 Djangoは、ログインに必要なデコレータを表示して、ビューに配置できます。 これを見てください: http://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

+0

はい、私はすべてのログインに必要なデコレータを持っています、問題はログイン状態がキャッシュされていることです。 –

+0

しかし、あなたが "リフレッシュ"したかどうかは明らかです。 –

関連する問題