Django 1.11 に基づくかなり複雑な webapp があります。少し前に、ユーザーが「他の誰かのビュー」を取得していると報告し始めました。memcached は@cache_page(xx)
、キャッシュ猶予期間内のセッションを区別せずに、デコレーターによってキャッシュされた html をユーザーに提供しました。
さらに調査したところ、場合によってVary: Cookie
はヘッダーが欠落しており、間違った「セッション」が提供されていることがわかりました。奇妙なことに、curl を使用してバックエンドにクエリを実行した場合にのみ表示されました (セッション、ユーザーなどがない -> バックエンドがキャッシュされたビューでログに記録されました)。
残念ながら、この問題は再現が非常に難しく、発生する場合と発生しない場合があります。単純な Django アプリをゼロから作成して、原因を確認できるかどうかを確認することさえあります。@cache_page
観察されたのは、が削除またはlogin_required
追加されたときに問題が発生しないことです。
ビューからすべての @cache_page デコレータを削除することになりましたが、本番環境では問題は観察されませんでしたが、これは回避策であり、原因を知りたいです。
誰かが原因のヒントを持っていれば、それは大歓迎です!