我最近在我的Django应用程序上使用memcached实现了全站点缓存,我将TTL设置为大约500秒,并在Web应用程序的其他部分实现每个视图缓存.
我遇到的问题是,当用户注销时,因为它是一个表单帖子,网站的行为符合预期,但是如果他们然后转到网站的密码保护部分,则应用程序的行为就像他们仍然登录一样,除非他们点击"刷新".我是新来的缓存,并想知道我是否可以做任何聪明的事情来阻止这种情况?
我遇到了类似的问题.标准的Django方法是为经过身份验证的用户禁用缓存.
#settings.py CACHE_MIDDLEWARE_ANONYMOUS_ONLY=True
如果不同的用户看到不同的页面(例如:他们的用户名)并且您不能拥有一个版本,它可以正常工作.
但是,如果页面只有2个版本:对于经过身份验证的用户和其他用户,那么完全禁用经过身份验证的用户的缓存并不好.我写了一个应用程序,除此之外,还可以在这种情况下微调缓存.
更新.
顺便说一句:您提到当您点击"刷新"时,会收到正确版本的页面.这意味着问题是客户端缓存(Expires头或E-tag),而不是服务器缓存.
要防止客户端缓存(如果在同一URL下有多个版本的页面,则必须这样做)使用@cache_control(must_revalidate=True)
装饰器.