サーバー、LAMP、セットアップ、CakePHP アプリがあります。Web ブラウザーから Web ページを要求すると、常に 304 ステータスが返され、ページを変更した後でも古いページが表示されます。サーバーは、以前にアクセスしたページをキャッシュに保持し、後で要求した人にそれを提供しているようです。例: ユーザー「X」がこのシステムにログインし、ページ「ホーム」にアクセスしてログアウトします。別のユーザー「Y」がシステムにログインすると、「X」の「ホーム」が表示されますが、自分の名前が表示されたホームページにアクセスすることになっています。代わりに、X が以前にアクセスしたように見えます。「ホーム」ページなどのリソースを完全に削除しても、引き続きアクセスできます。確認したところ、ページには 304 not modified ステータス コードが表示されています。ただし、Apache 設定でこの動作を変更できませんでした。私は初心者で、解決策がありません。ここで何か助けていただければ幸いです。
1 に答える
1
他の誰かが同じ問題を抱えている場合は、自分の質問に返信します。この動作の潜在的な原因を発見しました。私の apache 設定は問題ありませんが、私の LAN には Apache Traffic Server があり、これはある種のリソースをキャッシュします。画像や css ファイルなどはデフォルトでキャッシュされます。ファイルに変更が加えられた場合は、古いファイルが提供されないように名前を変更することをお勧めします。Web ページについては、以下を追加して非キャッシュを強制しました。
<meta http-equiv="cache-control" content="no-cache" />
<meta http-equiv="cache-control" content="no-store" />
<meta http-equiv="cache-control" content="must-revalidate" />
<meta http-equiv="pragma" content="no-cache" />
<meta http-equiv="expires" content="0" />
CakePHP を使用していたので、AppController ファイルの beforeFilter メソッドに次の行も追加しました (ここで質問されます)。
function beforeFilter() {
/**
* https://stackoverflow.com/questions/27804628/cakephp-caching-issue-when-redirecting-back-to-same-page
*/
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
}
誰かの役に立てば幸いです。
于 2015-04-21T08:43:10.943 に答える