それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

セッション使うとキャッシュが効かない!? session_start で pragma : no-cache が自動付与される。

php で画像を送信してたんですよ。

画像なので、キャッシュして良いんですけど。なぜかキャッシュしないんですよね。

HTTPキャッシュのヘッダみたら・・・

Expires: ...
LastModified: ...
E-tag: ..
Pragma: no-cache

え? nocacheが送られてる?なんで。

pragma:no-cache どこから出てきた。

散々しらべたらまじか。 session_start(); すると no-cacheにされるのがデフォルト仕様

<?php
session_start();

これをすると

session_cache_limter("no-cache");

が自動で使われる.

この値をほうっておくと HTTPヘッダに

Expires: 過去
Pragma: no-cache

が付与されて、キャッシュの制御が面倒になる。

キャッシュを効かせたいときは

session_cache_limter("public");

などにしたうえで、

  • キャッシュキー(いずれか1つが必須
  • Last-modified
  • E-tag
  • Cache-Control
  • public / private
  • max-age

を付与しないと上手くキャッシュしない。

セッションを使うときは

session_cache_limiter をペア使うことを意識しておくと。キャッシュが効かないとコネクション数が増えちゃったり、無駄な処理が増えるのでサーバー限界早すぎる。

詳しくは、 php.ini の設定項目なんだけど。気づかないよねコレ。

2017-06-22

わかりにくいので追記

参考資料

PHP: session_cache_limiter - Manual