Contents
- UNIX
- Windows
- サーバ
- プログラミング言語
- データベース
- プロトコル
- サービス
- オープンソース
- 規格・技術
- アプリケーション
- PC
- DEVICE
- その他(未分類)
お問合せ: メールフォーム
php はSESSIONを使うとデフォルトで No Cache、つまり「キャッシュ禁止」を指示する HTTPヘッダを3種類吐きます。
(PHP 5.2.0 で検証)
Expires: Thu, 19 Nov 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Pragma: no-cache
これは、php.ini の session.cache_limiter の設定がデフォルトで nocache になっていることに起因します。
less /path/to/php.ini : session.cache_limiter = nocache :
キャッシュさせたい場合、つまり「キャッシュ禁止」ヘッダを 吐かせたくない場合 は次のように「public」を設定をします。
session.cache_limiter = public
すると、次の HTTPヘッダに変わります。(要 apache 再起動)
Expires: Thu, 22 Nov 2006 12:11:59 GMT Cache-Control: public, max-age=10800 Last-Modified: Fri, 02 Mar 2006 06:40:28 GMT
Expires: 有効期限が未来になる (どれくらい未来になるかは、session.cache_expire の設定による)
Cache-Control: キャッシュ許可を示す public になる
Last-Modified: 出力されるようになる
Pragma: no-cache 出力されなくなる
.htaccess の場合
php_value session.cache_limiter public
関数 の場合
session_cache_limiter('public');
キャッシュリミッタは、クライアントに送信されるキャッシュ制御用の HTTPヘッダを制御します。
これらのヘッダは、ページの内容をクライアントやプロキシがキャッシュ する規則を定義します。
例えば、キャッシュリミッタを nocacheに設定した場合、クライアント/プロキシのキャッ シュは無効になります。
しかし、publicの場合は、 キャッシュを許可します。
privateと設定すること も可能で、この場合、プロキシがキャッシュすることは許可しませんが クライアントがキャッシュすることは許可されます。
privateモードにおいて、Expireヘッダがクライア ントに送信されます。
これは、Mozillaのようないくつかのブラウザを混 乱させます。
これを避けるには、 private_no_expireモードを使用してください。
このモードでは、Expireヘッダはクライアントに送信されません。
(PHPマニュアルより引用)
キャッシュリミッタは、リクエスト開始時に session.cache_limiterに保存されたデフォルト値 にリセットされます。
つまり、各リクエスト毎に(アウトプットバッファー が無効な場合は、session_start()がコールされる 前に) session_cache_limiter()をコールする必要 があります。
(PHPマニュアルより引用)