当前位置:  开发笔记 > 编程语言 > 正文

PHP会话修改的缓存控制头?

如何解决《PHP会话修改的缓存控制头?》经验,为你挑选了2个好方法。

我正在使用Zend_Controller_Response对象将图像输出到浏览器.我打算将缓存应用于图像,但是有些东西会导致Cache-Control标头被覆盖.

我的代码如下:

$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中查看)是:

响应标题

日期
2009年3月25日星期三,格林威治标准时间10:34:40
服务器
Apache/2.2.3(Ubuntu)mod_ssl/2.2.3 OpenSSL/0.9.8c
过期
星期四,2009年3月26日10:34:41 GMT
缓存控制
no-store,no-cache,must-revalidate,post-check = 0,pre-check = 0,max-age = 3600
最后修改
1234872514
ETAG
d3ef646c640b689b​​0101f3e03e08a524
内容长度
1452
X-UA兼容
IE = EmulateIE7
X-Robots-Tag中
NOINDEX
活着
超时= 15,最大= 100
连接
活着
内容类型
图像/ JPEG

请求标题

主办
khall.####.###.######.com
用户代理
Mozilla/5.0(X11; U; Linux i686; en-US; rv:1.9.0.7)Gecko/2009030422 Ubuntu/8.04(hardy)Firefox/3.0 .7
接受
text/html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,*/*; Q = 0.8
接受语言
烯GB,EN; Q = 0.5
接受编码
gzip的,放气
接收字符
ISO-8859-1,utf-8; Q = 0.7,*; Q = 0.7
活着
300
连接
活着
引荐
HTTP://khall.####.###.######.com/
曲奇饼
PHPSESSID = abf5056e1289d3010448107632a1c1bd

如您所见,缓存控件被修改为包括:

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

我怀疑是在请求中发送会话cookie.有没有人知道发送我需要的标题的方法,但仍然在请求中保持会话?我的应用程序通过引导程序运行,并使用Zend_Session处理会话.

任何帮助,将不胜感激.



1> Stefan Gehri..:

您是正确的,假设此行为已连接到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在此处附加设置).

可能的解决方案是

    将PHP配置(session.cache_limiter)更改为例如none- 但这可能会给其他PHP应用程序带来问题

    使用设置session.cache_limiter每个请求session_cache_limiter()

    Cache-Control用指定的字符串覆盖控制器中的full -header

对于可能的值session.cache_limitersession_cache_limiter()有:

none:不会发送标头

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



2> karim79..:

从Zend_Controller文档,第10.9节.响应对象

setHeader($ name,$ value,$ replace = false)用于设置单个标头.默认情况下,它不会替换对象中同名的现有标头; 但是,将$ replace设置为true将强制它这样做.

你遇到的问题是你的max-age = 3600被附加到缓存控制头,而不是替换它.尝试将$ replace参数设置为true.

推荐阅读
mobiledu2402851377
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有