Cache-Control Header modifié par session PHP?
J'obtiens une image dans le navigateur à l'aide d'un Zend_Controller_Response
objet. Il est de mon intention de demander la mise en cache de l'image, mais quelque chose est à l'origine de l'entête Cache-Control pour être remplacé.
Mon code est comme suit:
$this->getResponse()
->setHeader('Last-Modified', $modifiedTime, true)
->setHeader('ETag', md5($modifiedTime), true)
->setHeader('Expires', $expires, true)
->setHeader('Pragma', '', true)
->setHeader('Cache-Control', 'max-age=3600')
->setHeader('Content-Type', $mimeType, true)
->setHeader('Content-Length', $size, true)
->setBody($data);
La sortie (comme affiché dans Firebug) est:
En-Têtes De Réponse
- Date
- Wed, 25 Mar 2009 10:34:40 GMT
- Serveur
- Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8 c
- Expires
- Thu, 26 Mar 2009 10:34:41 GMT
- Cache-Control
- no-store, no-cache, must-revalidate, post-check=0, pre-check=0, max-age=3600
- Last-Modified
- 1234872514
- Etag
- d3ef646c640b689b0101f3e03e08a524
- Content-Length
- 1452
- X-UA-Compatible
- IE=EmulateIE7
- X-Robots-Tag
- noindex
- Keep-Alive
- timeout=15, max=100
- Connexion
- Keep-Alive
- Content-Type
- image/jpeg
En-Têtes De Requête
- Accueil
- khall.####.###.######.com
- User-Agent
- Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.7) Gecko/2009030422 Ubuntu/8.04 (hardy) Firefox/3.0
.7- Accepter
- text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language
- fr-fr,en;q=0.5
- Accept-Encoding
- gzip,deflate
- Accept-Charset
- ISO-8859-1,utf-8;q=0.7,*;q=0.7
- Keep-Alive
- 300
- Connexion
- keep-alive
- Referer
- http://khall.####.###.######.com/
- Cookie
- PHPSESSID=abf5056e1289d3010448107632a1c1bd
Comme vous pouvez le voir, le contrôle de la mémoire cache est modifié pour inclure:
no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Mon soupçon est vers le cookie de session envoyé dans la requête. Quelqu'un connais un moyen pour envoyer l'en-tête que j'ai besoin, mais toujours garder la session à la demande? Mon application est exécutée par l'intermédiaire d'un bootstrap, et les séances sont gérées à l'aide de Zend_Session.
Toute aide serait appréciée.
source d'informationauteur Kieran Hall
Vous devez vous connecter pour publier un commentaire.
De la Zend_Controller documentation, section 10.9. L'Objet De La Réponse
Le problème que vous rencontrez est votre max-age=3600 est ajouté à l'entête cache-control, plutôt que de la remplacer. Essayez de définir le $remplacer paramètre vrai.
Vous avez raison, en supposant que ce comportement est relié au mécanisme de session en PHP. Il y a un paramètre de configuration
session.cache_limiter
qui contrôle la mise en cache des en-têtes HTTP qui sera envoyé avec la réponse. Le paramètre par défaut estnocache
qui envoieVous de remplacer toutes ces en-têtes au sein de votre contrôleur en plus de la
Cache-Control
de l'en-tête (vous uniquement ajouter votremax-age=3600
paramètre ici).Les solutions possibles sont:
session.cache_limiter
), par exemplenone
- mais cela pourrait causer des problèmes à d'autres applications PHPsession.cache_limiter
sur chaque requête à l'aidesession_cache_limiter()
Cache-Control
-d'en-tête dans votre contrôleur avec désignés chaîneLes valeurs possibles pour
session.cache_limiter
etsession_cache_limiter()
sont:aucun: aucun en-tête sera envoyé
nocache:
privé:
private_no_expire:
public: