王骏的博客
编程、网络技术点滴...

公告

逐渐将VC知识库的博客迁移到这里!

随笔分类

随笔档案

相册

最新评论

阅读排行榜

评论排行榜

程序员博客   首页  新随笔  订阅  管理  登录 
 
JO2000 阅读(2566) 评论(0)

ThinkPHP 通过display加载渲染的页面默认缓存控制都为Cache-control:private,而有时候我们需要Cache-control:no-cache, no-store, must-revalidate 这样可以回退浏览器也刷新页面,我们需要对ThinkPHP进行修改。

 

1)修改ThinkPHP\Library\Think\Controller.class.php

protected function display($templateFile='',$charset='',$contentType='',$content='',$prefix='',$cacheControl='') {
   $this->view->display($templateFile,$charset,$contentType,$content,$prefix,$cacheControl);
}

 

添加了$cacheControl=''

 

2)修改ThinkPHP\Library\Think\View.class.php

public function display($templateFile='',$charset='',$contentType='',$content='',$prefix='',$cacheControl='') {
        G('viewStartTime');
        // 视图开始标签
        Hook::listen('view_begin',$templateFile);
        // 解析并获取模板内容
        $content = $this->fetch($templateFile,$content,$prefix);
        // 输出模板内容
        $this->render($content,$charset,$contentType,$cacheControl);
        // 视图结束标签
        Hook::listen('view_end');
    }

 

private function render($content,$charset='',$contentType='',$cacheControl=''){
        if(empty($charset))  $charset = C('DEFAULT_CHARSET');
        if(empty($contentType)) $contentType = C('TMPL_CONTENT_TYPE');
		if(empty($cacheControl)) $cacheControl = C('HTTP_CACHE_CONTROL');
        // 网页字符编码
        header('Content-Type:'.$contentType.'; charset='.$charset);
        header('Cache-control: '.$cacheControl);  // 页面缓存控制
        header('X-Powered-By:ThinkPHP');
        // 输出模板文件
        echo $content;
    }

 

两个函数都增加了$cacheControl

 

3)调用例子

header("Pragma: no-cache");
header("Expires: 0");

$this->display('Index', '', '', '', '', 'no-cache, no-store, must-revalidate');

打赏作者

如果本文对您有帮助,请打赏支持一下作者,谢谢您!


微信打赏

支付宝打赏

发表评论
切换编辑模式