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

如何在登录/注销时处理浏览器缓存?

  •  2
  • Julien  · 技术社区  · 16 年前

    为了提高性能,我想为每个页面添加一个相当长的缓存控制(最多30分钟),因为它们不会经常更改。但是,每个页面还显示登录用户的名称(如此网站)。

    问题是当用户登录或注销时:用户名必须更改。如何在每次登录/注销操作后更改用户名,同时保持长缓存控制?

    以下是我能想到的解决方案:

    • 用于检索和显示用户名的Ajax请求(未缓存)。如果我有2个请求(/user?注册和/用户?新的),它们也可以被缓存。但是我担心这个额外的请求会使我的缓存性能失效
    • 添加唯一的URL变量(?time=)使URL不同,并取消缓存。但是,我必须将这个变量添加到我网页上的所有链接中,而不是非常方便的代码操作。

    如果注册用户和新用户实际拥有更多不同的内容,这个问题就会变得更严重。

    1 回复  |  直到 16 年前
        1
  •  5
  •   bobince    16 年前
    Cache-Control: private
    

    在实践中通常是足够的。这就是它的用途。

    理论上,如果您需要考虑来自同一个客户机的变量登录的情况,您可能应该设置 Vary Cookie (假设这是用于登录的机制)。但是,这个值 变化 (和其他大多数人一样)完全弄乱了IE的缓存,因此通常可以避免。而且,通常 可取的 允许用户单步执行后退/前进列表,包括登录/退出页面,而无需重新获取。

    对于每个页面强制正确登录的情况(如银行),完整的 Cache-Control: no-cache 通常使用。