この動作は、非公式にページキャッシュと呼ばれるWebkitブラウザの機能が原因で発生します。これはバック/フォワードキャッシュとも呼ばれます。現在のブラウジングセッションで前のページに何が起こるかを制御します。Webkitは、前のページを「一時停止」するという点で特別なことをします。前のページが別のタブで非表示になっているようです。戻るボタンをクリックすることは、タブを前面に表示するようなものです。ページはそのままです。これは、ネットワーク要求が行われないことを意味し、したがって、サーバーロジックが変更されることはありません。
この動作は、ChromeだけでなくSafariでも見られます。ネットワークインスペクターパネルを見て、クリックしてページに戻ったときのネットワークトラフィックを監視します。一見、リクエストがあったように見えます。Safariは、実際にはリクエストが行われなかったという考えを払拭するのに役立ちません。Chromeはより丁寧で、ページが「(キャッシュから)」読み込まれたことを通知します。Chromeで、サイズの列を確認するか、リクエストをクリックして、 [ヘッダー]タブのステータスコードを確認します。もちろん、他の指標は、「リクエスト」がタイムラインでかかった時間(おそらく0ms)です。
それは振る舞いを説明します...今それを回避する方法。最善の解決策は、ログアウトページでブラウザウィンドウを閉じるように通知することです。
Django側でできることは何もないと正しく判断しました。キャッシュデコレータは役に立ちません。残念ながら、ページキャッシュがページを隠してしまうのを防ぐための標準的な答えはないようです。また、これは流動的な機能のように思われるため、解決策は、Webkitの新しいバージョンでは機能しないハックである可能性があります。または、Firefoxは異なる実装で同様の機能を作成する場合があります。
HTTPSを介してサイトにサービスを提供するcache-control: no-storeかcache-control: no-cache、それを実行する可能性がありますが、確かに手間がかかります。考えられるハックの1つは、unload/onunloadイベントハンドラーを設定することです。
これらの 2つのSurfin'Safariの記事で、ページキャッシュの動作とアンロードハックの提案について詳しく読んでください。
更新-@DigitalCakeは、Cache-Control:no-store何らかの効果があることを発見しました。Djangoでは、これは@cache_control(no_store=True)ビューを装飾することで実現されます。Chrome(v17.0.963.66)でno store 動作します-ページはページキャッシュに隠されておらず、戻るボタンによってネットワークリクエストが発生します。Safari(v5.1.3)では動作no storeしません。これは、Webkitブラウザー間でも、ページキャッシュの実装が異なることを示しています。また、現在の回避策は一時的なハッキングである可能性が高いという点も示しています。