Cache-Control vuruşu PHP Session Değiştiren?

3 Cevap php

Ben bir Zend_Controller_Response nesnesi kullanarak tarayıcıya bir görüntü çıktısı ediyorum. Bu görüntüye önbelleğe uygulamak için benim niyeti, ancak bir şey Cache-Control başlık üzerine yazılmasına neden oluyor.

Aşağıdaki gibi benim kod:

$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);

(Kundakçı görüldüğü gibi) çıktısı:

Response Headers

Date
Wed, 25 Mar 2009 10:34:40 GMT
Server
Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
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
Connection
Keep-Alive
Content-Type
image/jpeg

Request Headers

Host
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
Accept
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language
en-gb,en;q=0.5
Accept-Encoding
gzip,deflate
Accept-Charset
ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive
300
Connection
keep-alive
Referer
http://khall.####.###.######.com/
Cookie
PHPSESSID=abf5056e1289d3010448107632a1c1bd

Gördüğünüz gibi, önbellek denetim içerecek şekilde değiştirilmiştir:

no-store, no-cache, must-REVALIDATE, post-check = 0, pre-check = 0

Benim şüphe isteğinde gönderilen oturum tanımlama doğru değildir. Herkes ben gerektiren, yine istek oturumu tutmak başlık göndermek için bir yol biliyor mu? Benim uygulama bir bootstrap aracılığıyla çalıştırılır ve oturumlar Zend_Session kullanılarak işlenir.

Herhangi bir yardım mutluluk duyacağız.

3 Cevap

Zend_Controller belgelere, bölüm 10.9. The Response Object

setHeader($name, $value, $replace = false) is used to set an individual header. By default, it does not replace existing headers of the same name in the object; however, setting $replace to true will force it to do so.

Eğer yaşıyorsanız sorun bunu yerine aksine = 3600 senin max-age, önbellek kontrol başlığına eklenen ediliyor olmasıdır. true için $replace parametresini belirlemeyi deneyin.

Bu davranış PHP oturum mekanizmasına bağlı olduğunu varsayarak haklısın. Yanıt ile gönderilecektir önbelleğe HTTP başlıklarını kontrol eden bir yapılandırma ayarı session.cache_limiter vardır. Burada ayar varsayılan nocache hangi gönderir

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

Sen Cache-Control başlığının yanı sıra sizin denetleyicisi olan bu başlıkların hepsi üzerine yazmak (sadece sizin max-age=3600 burada ayar append).

Olası çözümler şunlardır:

  1. (session.cache_limiter ) to e.g. none PHP yapılandırmasını değiştirme - ama bu diğer PHP uygulamalarının sorunları tanıtmak olabilir
  2. session_cache_limiter() kullanarak her istek üzerine session.cache_limiter set
  3. belirlenen dize ile kontrolör tam Cache-Control-başlığı üzerine yazılır

session.cache_limiter ve session_cache_limiter() için olası değerler şunlardır:

none: herhangi bir başlık gönderilir

nocache:

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

private:

Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: private, max-age=10800, pre-check=10800

private_no_expire:

Cache-Control: private, max-age=10800, pre-check=10800

public:

Expires: pageload + 3 hours
Cache-Control: public, max-age=10800

Kieran, bu SendFile helper ve blog post yararlı eşlik bulabilirsiniz.