如何通过登录/注销处理浏览器缓存?

Jul*_*ien 2 performance caching

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

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

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

  • Ajax请求(未缓存)以检索和显示用户名.如果我有2个请求(/ user?registered和/ user?new),它们也可以被缓存.但是我担心这个额外的请求会使我的缓存性能无效
  • 添加唯一的URL变量(?time =)以使URL不同,并取消缓存.但是,我必须将此变量添加到我的网页上的所有链接,代码方式不是很方便

如果我实际上有更多内容与注册用户和新用户不同,这个问题会变得更大.

bob*_*nce 5

Cache-Control: private
Run Code Online (Sandbox Code Playgroud)

通常在实践中足够了.这就是SO的用途.

从理论上讲,如果你需要允许可变登录的从你或许应该设置相同的客户端的情况下VaryCookie(假设这是您使用的登录机制).然而,这个Vary(以及大多数其他)的值完全搞砸了IE的缓存,因此通常可以避免.此外,通常希望允许用户单步执行后退/前进列表,包括登录/退出页面,而无需重新获取.

对于每个页面强制执行适当登录的情况至关重要(例如银行业务),Cache-Control: no-cache通常会使用full .