2009-03-25 10 views
10

मैं Zend_Controller_Response ऑब्जेक्ट का उपयोग कर ब्राउज़र में एक छवि आउटपुट कर रहा हूं। छवि पर कैशिंग लागू करना मेरा इरादा है, हालांकि कुछ कैश-कंट्रोल हेडर को अधिलेखित करने का कारण बन रहा है।कैश-कंट्रोल हैडर PHP सत्र द्वारा संशोधित?

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

निर्गम (Firebug में देखा के रूप में) है:

प्रतिक्रिया हेडर

दिनांक
बुध, 25 मार्च

मेरे कोड इस प्रकार है 2009 10:34:40 जीएमटी

सर्वर
अपाचे/2.2.3 (उबंटू) mod_ssl/2.2.3 OpenSSL/0.9.8c
समय-सीमा समाप्त
गुरु, 26 मार्च 2009 10:34:41 GMT
कैश-नियंत्रण
कोई दुकान नो-कैश, चाहिए-पुनः सत्यापित, बाद जांच = 0, पूर्व जाँच = 0, अधिकतम उम्र = 3600
Last-Modified
ETag
d3ef646c640b689b0101f3e03e08a524
सामग्री-लंबाई +०१२३५२७१५०९१
एक्स-UA- संगत
IE = EmulateIE7
एक्स-Robots-Tag
नोइंडेक्स
Keep-Alive
टाइमआउट = 15, अधिकतम = 100
कनेक्शन
रखना और जिंदा
सामग्री प्रकार
image/jpeg

अनुरोध हेडर

होस्ट
khall। ####। ###। ######। कॉम
उपयोगकर्ता-एजेंट
Mozilla/5.0 (X11; यू; लिनक्स i686; en-US; आर.वी.: 1.9.0.7) छिपकली/२००९०३०४२२ Ubuntu/8.04 (हार्डी) फ़ायरफ़ॉक्स/3.0 .7
स्वीकार
पाठ/html, आवेदन/xhtml + xml, application/xml; q = 0.9, */*; क्ष = 0.8
स्वीकार करें-भाषा
en-gb, एन, क्यू = 0.5
Accept-Encoding
gzip, हवा निकालना
स्वीकार करें-वर्णसेट
ISO-8859-1, utf-8; q = 0.7, *; q = 0।7
रखें-जिंदा
कनेक्शन
रखें जिंदा
Referer
http: //khall.####.###.######.com/
कुकी
PHPSESSID = abf5056e1289d3010448107632a1c1bd

आप देख सकते हैं, कैश नियंत्रण शामिल करने के लिए संशोधित किया गया है :

कोई दुकान, कोई कैश, होगा पुनः सत्यापित, बाद जांच = 0, पूर्व जाँच = 0

मेरे संदेह सत्र कुकी की ओर है अनुरोध में भेजा जा रहा है। क्या किसी को हेडर भेजने की कोई तरीका पता है जो मुझे चाहिए, फिर भी अनुरोध में सत्र रखें? मेरा एप्लिकेशन बूटस्ट्रैप के माध्यम से चलाया जाता है, और सत्र Zend_Session का उपयोग करके संभाला जाता है।

किसी भी मदद की सराहना की जाएगी।

उत्तर

13

Zend_Controller प्रलेखन से, खंड 10.9. The Response Object

setHeader एक व्यक्ति हैडर सेट करने के लिए प्रयोग किया जाता है ($ नाम, $ मूल्य, $ = झूठी बदलें)। डिफ़ॉल्ट रूप से, यह ऑब्जेक्ट में उसी नाम के मौजूदा शीर्षलेखों को प्रतिस्थापित नहीं करता है; हालांकि, $ को सही पर प्रतिस्थापित करने से यह ऐसा करने के लिए मजबूर होगा।

आपके पास होने वाली समस्या यह है कि आपकी अधिकतम आयु = 3600 कैश-कंट्रोल हेडर में संलग्न की जा रही है, इसे बदलने के विपरीत। $ पैरामीटर सत्य पर प्रतिस्थापित करने का प्रयास करें।

+0

GAH! मुझे चेहरे पर खुद को स्मैक करना चाहिए। मैंने सोचा कि मैं उस पैरामीटर को पार कर रहा था! हालांकि आप काफी सही हैं, यही जवाब है। –

+0

हे, मैं इसे हर समय करता हूं! प्रमाण? http://stackoverflow.com/questions/657600/how-do-i- सही ढंग से-create-a-zend-feed – karim79

26

आप यह मानकर सही हैं कि यह व्यवहार PHP में सत्र तंत्र से जुड़ा हुआ है। एक कॉन्फ़िगरेशन सेटिंग session.cache_limiter है जो कैशिंग HTTP शीर्षलेख को नियंत्रित करती है जो प्रतिक्रिया के साथ भेजी जाएगी। यहाँ डिफ़ॉल्ट सेटिंग 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 

आप Cache-Control -header अलावा अपने नियंत्रक के भीतर इन हेडर के सभी के ऊपर लिख भेजता है (आप केवल यहाँ की स्थापना अपने max-age=3600 संलग्न)।

संभव समाधान हैं:

  1. PHP विन्यास (session.cache_limiter) को बदलने के लिए उदाnone - लेकिन इस session_cache_limiter()
  2. का उपयोग कर session.cache_limiter के लिए

संभावित मान निर्दिष्ट तार के साथ अपने नियंत्रक में पूर्ण Cache-Control -header के ऊपर लिख अन्य पीएचपी अनुप्रयोगों

  • प्रत्येक अनुरोध पर session.cache_limiter स्थापित करने के लिए समस्याओं को पेश हो सकता है और session_cache_limiter() हैं:

    कोई भी: कोई शीर्ष लेख भेजा जाएगा

    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 
    

    निजी:

    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 
    

    सार्वजनिक:

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

    आपके उत्तर के लिए धन्यवाद। समस्या मेरी जल्दबाजी कोडिंग थी, क्योंकि करीम 7 9 ने बताया: समस्या ज़ेन फ्रेमवर्क आधारित है। अंतर्दृष्टि के लिए धन्यवाद, यद्यपि। –

    +0

    अच्छा, यह मेरा प्रश्न हल किया: http://stackoverflow.com/questions/1937581/php-remove-http-header –

    संबंधित मुद्दे