̃Gg[͂ĂȃubN}[Nɒlj

PHP :: キャッシュを制御するヘッダ「session.cache_limiter」



php はSESSIONを使うとデフォルトで No Cache、つまり「キャッシュ禁止」を指示する HTTPヘッダを3種類吐きます。
(PHP 5.2.0 で検証)

吐かれる HTTPヘッダ

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」を設定をします。

php.ini

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」と「組み込み関数」でも可能

.htaccess の場合

php_value session.cache_limiter public

関数 の場合

session_cache_limiter('public');


public の意味と、その他の設定値

キャッシュリミッタは、クライアントに送信されるキャッシュ制御用の HTTPヘッダを制御します。
これらのヘッダは、ページの内容をクライアントやプロキシがキャッシュ する規則を定義します。
例えば、キャッシュリミッタを nocacheに設定した場合、クライアント/プロキシのキャッ シュは無効になります。
しかし、publicの場合は、 キャッシュを許可します。
privateと設定すること も可能で、この場合、プロキシがキャッシュすることは許可しませんが クライアントがキャッシュすることは許可されます。
privateモードにおいて、Expireヘッダがクライア ントに送信されます。
これは、Mozillaのようないくつかのブラウザを混 乱させます。
これを避けるには、 private_no_expireモードを使用してください。
このモードでは、Expireヘッダはクライアントに送信されません。
(PHPマニュアルより引用)


session_cache_limiter 関数を使うときの注意点

キャッシュリミッタは、リクエスト開始時に session.cache_limiterに保存されたデフォルト値 にリセットされます。
つまり、各リクエスト毎に(アウトプットバッファー が無効な場合は、session_start()がコールされる 前に) session_cache_limiter()をコールする必要 があります。
(PHPマニュアルより引用)




programming/php/etc/session.cache_limiter.txt