首页 > PHP,好久不见 > ThinkPHP > ThinkPHP里关于禁用客户端缓存的问题
2015
03-20

ThinkPHP里关于禁用客户端缓存的问题

为了避免用户点击浏览器的后退按钮和前进按钮触发提交,导致重复数据。有一种方法可以设置header头中的Cache-control为no-cache和no-store。该属性默认是private的。

Cache-directive 说明
public 所有内容都将被缓存
private 内容只缓存到私有缓存中
no-cache 所有内容都不会被缓存
no-store 所有内容都不会被缓存到缓存或 Internet 临时文件中
must-revalidation/proxy-revalidation 如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证
max-age=xxx (xxx is numeric) 缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高

易点SEO随笔有一篇博客解释得很浅显:

其作用根据不同的重新浏览方式分为以下几种情况:

1.打开新窗口(_blank)

private、no-cache、must-revalidate 再次访问服务器
Cache-control: max-age=5(表示当访问此网页后的5秒内再次访问不 会去服务器)

2.在地址栏回车
值为private或must-revalidate则只有第一次访问时会访问服务器,以后就不再访问。
值为no-cache,那么每次都会访问。
值为max-age,则在过期之前不会重复访问。

3.按后退按扭
值为private、must-revalidate、max-age,则不会重访问,
值为no-cache,则每次都重复访问

4.按刷新按扭
无论为何值,都会重复访问

ThinkPHP的view缓存机制里默认是使用private的。

ThinkPHP\Library\Think\View.class.php第92行

ThinkPHP里关于禁用客户端缓存的问题 - 第1张  | foam

我使用的是TP3.2,可以在配置文件中设置该属性,就不需要注释该行代码了。

‘HTTP_CACHE_CONTROL’ => ‘no-cache,no-store’

但是这么一来,整个项目的页面的Cache-control都是no-cache,no-store了。只针对某些页面设置为no-cache,no-store。有没有更灵活的处理方法呢?有时间再看看。

最后编辑:
作者:foam
foam
这个作者貌似有点懒,什么都没有留下。

留下一个回复

你的email不会被公开。

4 加上 5 ?