残念ながら、クライアントが PHP または任意のサーバー環境からページをキャッシュしたかどうかを簡単に見分けることはできません。ただし、キャッシュするかどうか、およびキャッシュする期間についてブラウザにアドバイスすることはできます。これは、Cache-Control HTTP ヘッダー (およびフレンド) を設定することによって実現されます。このページを参照してください。ほとんどの人は、今後数時間までのキャッシュを指定する傾向があるため、ユーザーは古いデータを 2 時間以上見ることはありません。これをお勧めしますが、キャッシュを完全に無効にするようブラウザに指示することもできます。とにかく、私の意見では、これらのヘッダーを .htaccess ファイルに設定するのが最も簡単な解決策です。
以下は、2 時間の制限時間の例です。
# Cache CSS and JS files for up to 2 hours
<FilesMatch "\.(css|js)$">
<IfModule mod_headers.c>
# Set Max-age to 7200 seconds (2 hours), revalidate after 2 hours (ask the server if the file's changed)
Header set Cache-Control "max-age=7200, must-revalidate"
</IfModule>
FileETag MTime Size
</FilesMatch>
もう 1 つのオプションは、キャッシュを許可することですが、リクエストごとに何かが変更されたかどうかをクライアントにサーバーに問い合わせさせることです。特に多くの css および js ファイルを提供するページ (通常は Drupal の場合) では、ブラウザーはファイルごとにサーバーへのラウンドトリップ リクエストを行う必要があるため、それほど大きなメリットはありません。
# Only use cache if checking with the server results in a 304 (Not Modified)
<FilesMatch "\.(css|js)$">
<IfModule mod_headers.c>
# Instruct the client and possibly proxies in front of the client to check for new versions every 0 seconds (always)
Header set Cache-Control "max-age=0, public, must-revalidate, proxy-revalidate"
# For older browsers
Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT"
</IfModule>
FileETag MTime Size
</FilesMatch>
最後に、ブラウザにキャッシュを無効にするように依頼できます。ページの読み込み時間がかかるため、ファイルが非常に頻繁に変更されることが確実でない限り、これはお勧めしません。
# Disable caching
<FilesMatch "\.(css|js)$">
<IfModule mod_headers.c>
Header set Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0"
# For older browsers
Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT"
</IfModule>
FileETag MTime Size
</FilesMatch>