

HTML(PHP)で飛び先ページのキャッシュが残っているようでページを更新してもキャッシュに残っているような挙動を行います。ブラウザはFirefoxです。

ページをキャッシュさせないようにするにはどうしたらいいのでしょうか？またキャッシュされたページを更新して反映させる方法はないのでしょうか？

一応、

[code]

    <meta http-equiv="Pragma" content="no-cache">
    <meta http-equiv="Cache-Control" content="no-cache">
    <meta http-equiv="Expires" content="0">
    
[/code]

のようなメタを付けてみましたが効果がありませんでした。iPhoneのSafariではうまくいっています。対応方法ご存知の方は教えていただけないでしょうか。


CC BY-SA 3.0
2015-03-04T15:30:19.227
7450
2015-03-05T11:03:15.463
8593
question
php firefox
HTML(PHP)のキャッシュを残さないようにするには


これでいかがでしょう。

[code]

    <meta http-equiv="Pragma" content="no-cache" />
    <meta http-equiv="Cache-Control" content="no-cache" />
    <meta http-equiv="Expires" content="<?php echo gmdate('D, d M Y H:i:s').' GMT'; ?>" />
    <meta http-equiv="Last-Modified" content="<?php echo gmdate('D, d M Y H:i:s'). ' GMT'; ?>" />
    
[/code]

`Expires` と `Last-Modified` には 0 ではなく、日付を指定します。  
現在時刻を設定してあげれば、常に "期限切れ" として扱われるためキャッシュされません。

一応確認してみたのですが、Expires の content="0" ないしは content="-1"
のように日付として無効な値を入れても同様にキャッシュされないようでした。

* * *

## 追記：

これはユーザ側の操作になってしまいますが、各ブラウザには所謂スーパーリロードというものがあります。  
そのページのキャッシュを無視し、全てのリソースをサーバーにリクエストするリロードの方法です。

[FireFox 公式 キーボードショートカット](https://support.mozilla.org/ja/kb/keyboard-
shortcuts-perform-firefox-tasks-
quickly?redirectlocale=ja&redirectslug=Keyboard+shortcuts)

> 再読み込み (キャッシュ上書き)

上記の項目に、`Ctrl + F5` および `Ctrl + Shift + R` によって可能であると記載されています。

* * *

## 更に追記

コメントにて `session.cache_limiter` の設定について言及されていたので、更に追記します。

応えから言うと、キャッシュを切りたい場合は `public` ではなく、`nocache` を指定しなければなりません。  
[PHP の関数で行うことも可能です。](http://php.net/manual/ja/function.session-cache-
limiter.php)

ドキュメントにある通り、この `session.cache_limiter` はレスポンスの HTTP ヘッダに影響を与えます。

この問題を解決するにあたって、やるとすれば以下のようにするといいと思います。

  1. php.ini に`session.cache_limiter=nocache` を設定する。
  2. 一番最初に呼ばれるであろう PHP スクリプトの先頭で `session_cache_limiter('nocache');` を記述してみる。

## 番外編：

上記で試してもダメな場合で、且つ画像や JS、CSS だけがキャッシュされている場合はリバースプロキシサーバで画像および CSS, JS
のキャッシュ機構がないか確認してみてください。(Akamaiとか)  
その場合は大抵  
`<link rel="stylesheet" type="text/css" href="xxx.css?t=<?php echo time();
?>">`  
のように、ファイル名の後ろにクエリパラメータを付けることによってキャッシュを迂回することができます。


CC BY-SA 3.0
2015-03-04T15:41:37.830
7452
2015-03-05T11:03:15.463
2015-03-05T11:03:15.463
7926
7926
7450
answer