代码之家  ›  专栏  ›  技术社区  ›  Ben

标题页缓存

  •  0
  • Ben  · 技术社区  · 15 年前

    我正在我的网站上使用下面的标题,但我遇到了一个问题。当我第一次访问我的网站时,我没有看到我的acp链接。也有一些信息在我们的数据库中,只有注册成员才能创建,但是表单仍在为未登录的用户加载,所以正在使用MexIdID字段创建0的信息。

    我认为问题是缓存文件在代理缓存中停留的时间太长。也许我错过了什么或者误解了我正在使用的缓存技术。

    任何人能提供的任何建议都是值得赞赏的。

      if ($currentMember->isLoggedIn()) {
       $this->cachePermission = 'private';
      } else {
       $this->cachePermission = 'public';
      }
      $this->tru->header->set('Pragma', array(
       $this->cachePermission
      ));
      $this->tru->header->set('Cache-Control', array(
       $this->cachePermission,
       'no-cache',
       'max-age=300',
       's-maxage=300',
       'must-revalidate'
      ));

    更新

    我主要是想让后退按钮在浏览器中工作。除此之外,我不想要任何其他缓存。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Jason    15 年前

    如果页面将根据用户是否登录而更改,我建议根本不允许缓存该页面。

    Cache-Control: no-store, must-revalidate
    Expires: 0
    

    如果这太极端了,我至少建议你 Cache-Control: private 决不允许它存储在代理缓存中。以我的经验,当不同的用户看到不同的东西时,允许代理缓存它只会带来麻烦。

    更新:

    根据我的经验,如果你想让它在所有主要的浏览器中运行,那么找到一个中间点是很困难的。你可以试着从 Cache-Control: private, must-revalidate 从那里出发。

    另一个可能有用的方法是使用 ETag header 基于页面的状态和登录的用户。添加头之后, pecl_http 提供一些有用的函数,如 http_cache_etag() 用于向浏览器发送304/未修改的响应,以便浏览器知道如何从缓存加载。

        2
  •  0
  •   memnoch_proxy    15 年前

    我看到Firefox在缓存方面变得非常激进。当您在uri中键入一个人工查询字符串并获得新的结果时,您可以知道这是发生的。

    ?asdf=1
    

    这通常是我在诊断浏览器疯狂时的最后一句话。